django中文件的上传问题

本文详细讲解了如何在Django中处理文件上传,包括前端表单提交、后端视图API的实现以及客户端Python脚本的配合。重点介绍了`requests`库在文件上传中的应用,并展示了如何保存和返回文件URL给前端。
摘要由CSDN通过智能技术生成

d j a n g o 中 文 件 的 上 传 问 题 django中文件的上传问题 django

client.py

import requests
import os

BASE_DIR = os.path.dirname(os.path.abspath(__file__))


# 主函数
if __name__ == "__main__":
    url = "http://127.0.0.1:8001/gen_model/predict/"
    while True:
        input_content = input('输入图片路径,输入-1退出,默认值) ')
        if input_content.strip() == "":
            input_content = '0_29.png'
        if input_content.strip() == "-1":
            break
        elif not os.path.exists(input_content.strip()):
            print('输入图片路径不正确,请重新输入')
        else:
            imageFilePath = input_content.strip()
            imageFileName = os.path.split(imageFilePath)[1]


            file_dict = {
                'img':(
                    imageFileName,
                    open(imageFilePath,'rb'),
                    'image/jpg'
                )
            }

            result = requests.post(url, files=file_dict)


            predict_result = result.text
            print('图片路径:%s 预测结果为:%s\n' %(imageFilePath, predict_result))

django

class PredictView(APIView):
    def save_file(self,file):
        filename = "test.png"
        filepath = os.path.join(settings.MEDIA_ROOT,filename)
        with open(filepath,'wb') as fp:
            for chunk in file.chunks():
                fp.write(chunk)
        return settings.MEDIA_URL + filename

    def post(self,request):
        file = request.FILES.get('img')
        file_url = self.save_file(file)
        return Response({"file": file_url})

前端HTML代码实现:

在前端中,我们需要填入一个 form 标签,然后在这个 form 标签中指 定 enctype=“multipart/form-data” ,不然就不能上传文件。
form 标签中添加一个 input 标签,然后指定 input 标签的 name ,以及 type=“file”

后端的代码实现:

后端的主要工作是接收文件。然后存储文件。接收文件的方式跟接收 POST 的方式是一样的,只不 过是通过 FILES 来实现。示例代码如下:

  def save_file(file): 
      with open('somefile.txt','wb') as fp: 
        for chunk in file.chunks(): 
           fp.write(chunk) 
  def index(request): 
      if request.method == 'GET': 
          form = MyForm() 
          return render(request,'index.html',{'form':form}) 
      else:
          myfile = request.FILES.get('myfile') 
          save_file(myfile) 
          return HttpResponse('success') 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值