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')