AI智能
改变未来

《Django Web应用开发实战》学习笔记 9- 文件上传及下载

目录

  • 学习资料
  • 1. 文件上传
  • 2. 文件下载

学习资料

《Django Web应用开发实战》

1. 文件上传

上传文件的原理,是将文件以二进制的形式读取写入到网站指定的文件夹里

在first_app/urls.py中添加如下的路由

...# 上传文件path(\'upload/\', views.upload, name=\'upload\')...

在first_app/views.py中添加如下视图函数

# 上传文件视图def upload(request):if request.method == \'POST\':# 获取上传的文件对象, myfile 等于模板中上传文件中代码的 name=myfilemyFile = request.FILES.get(\'myfile\', None)if not myFile:return HttpResponse(\'没有可上传文件\')# 打开文件地址,以二进制的形式写入到media目录下with open(f\'media/{myFile.name}\', \'wb\') as f:# myFile.chunks()按流式响应方式读取文件,可将其分块写入for chunk in myFile.chunks():f.write(chunk)return HttpResponse(\'文件已上传\')else:return render(request, \'upload.html\')

在项目根目录下templates/upload.html写入

<!DOCTYPE html><html lang=\"en\"><head><meta charset=\"UTF-8\"><title>上传文件</title></head><body><form enctype=\"multipart/form-data\" action=\"\" method=\"post\">{% csrf_token %}{# myfile 将跟着请求被传递到服务器 #}<input type=\"file\" name=\"myfile\"/><br><input type=\"submit\" value=\"上传文件\"></form></body></html>

2. 文件下载

常用的有两种方法StreamingHttpResponse, FileResponse:在frist_app/urls.py中新增路由

path(\'download\', \'views.download\', name=\'download\')

,然后在first_app/views.py 新增download视图函数

  • StreamingHttpResponse:支持大规模数据和文件传输

    def download(request):file_path = \'media/image3.jpg\'try:f = open(file_path, \'rb\')r = StreamingHttpResponse(f)r[\'content-type\'] = \'application/octet-stream\'# filename 是下载下来的文件名称r[\'Content-Disposition\'] = \'attchment;filename=image3.png\'return rexcept Exception as e:return Http404(f\'下载失败{e}\')
  • FileResponse: 只支持文件传输

    # 下载文件def download(request):file_path = \'media/image3.jpg\'try:f = open(file_path, \'rb\')# FileResponse 只支持文件下载, filename 是下载下来的文件名称r = FileResponse(f, as_attachment=True, filename=\'image3.png\')return rexcept Exception as e:return Http404(f\'下载失败{e}\')

FileResponse参数

  • as_attachment:为False将不提供文件下载功能,文件在浏览器中打开并读取,如果浏览器不能打开将下载到本地,并且文件没有后缀名
  • filename:下载文件到本地的文件名称,当as_attachment设置为False时,该参数将不生效,当该参数为空时,将自动使用原有的文件名
  • *args/**kwargs:status等参数,HttpResponseBase的参数

随后启动服务:访问:

http://127.0.0.1:8000/download/

将自动下载文件

赞(0) 打赏
未经允许不得转载:爱站程序员基地 » 《Django Web应用开发实战》学习笔记 9- 文件上传及下载