django实现文件上传和下载,怎么将django项目上传到服务器

  django实现文件上传和下载,怎么将django项目上传到服务器

  在实际的项目中很多时候需要用到下载功能,如导excel、pdf或者文件下载,当然你可以使用网服务自己搭建可以用于下载的资源服务器,如nginx,这里我们主要介绍框架中的文件下载。

  这里我们将下载的文件存放在项目媒体目录下,当然在实际中并不会这样做。

  方式一:使用HttpResponse

  进口货

  来自姜戈。httpimporthttpresponse,Http404

  定义媒体_文件_下载(请求,文件路径):

  withopen(file_path, rb)asf:

  尝试:

  response=HttpResponse(f)

  响应[内容类型]=应用程序/八位字节流

  响应[内容处置]=附件;filename= OS。路径。基本名称(文件路径)

  返回响应

  例外例外:

  raiseHttp404HttpResponse有个很大的弊端,其工作原理是先读取文件,载入内存,然后再输出。如果下载文件很大,该方法会占用很多内存。对于下载大文件姜戈更推荐StreamingHttpResponse和文件响应方法,这两个方法将下载文件分批(组块)写入用户本地磁盘,先不将它们载入服务器内存。

  方式二:使用StreamingHttpResponse

  进口货

  来自姜戈。httpimporthttpresponse,Http404,StreamingHttpResponse

  defstream _ http _下载(请求,文件路径):

  尝试:

  response=StreamingHttpResponse(open(file _ path, rb ))

  响应[内容类型]=应用程序/八位字节流

  响应[内容处置]=附件;filename= OS。路径。基本名称(文件路径)

  返回响应

  例外例外:

  太阳神

  iseHttp404方式三:使用FileResponse

  

importos

文件名中文乱码问题

 

  其中用英文的文件名,浏览器显示正常,但是用了中文后,就是默认的文件名,如下载.xls,或者如果我用了utf-8编码,是乱码。解决方法如下:

  

response['Content-Disposition']="attachment;filename*=utf-8''{}".format(escape_uri_path(name))

文件私有化的两种方法

 

  如果你想实现只有登录过的用户才能查看和下载某些文件,大概有两种方法,这里仅提供思路。

  上传文件放在media文件夹,文件名使用很长的随机字符串命名(uuid), 让用户无法根据文件名猜出这是什么文件。视图和模板里验证用户是否已登录,登录或通过权限验证后才显示具体的url。- 简单易实现,安全性不高,但对于一般项目已足够。

  上传文件放在非media文件夹,用户即使知道了具体文件地址也无法访问,因为Django只会给media文件夹里每个文件创建独立url资源。视图和模板里验证用户是否已登录,登录或通过权限验证后通过自己编写的下载方法下载文件。- 安全性高,但实现相对复杂。

  个人下载文档view视图代码

  

fromdjango.viewsimportView

 

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: