Django框架里如何实现文件下载操作?
- 内容介绍
- 文章标签
- 相关推荐
本文共计568个文字,预计阅读时间需要3分钟。
在现实项目中,经常需要使用下载功能,如导出Excel、PDF或下载文件。若能使用Web服务自行搭建可下载的资源服务器,例如Nginx,则更为高效。这里我们主要介绍Django中的文件下载功能。
在实际的项目中很多时候需要用到下载功能,如导excel、pdf或者文件下载,当然你可以使用web服务自己搭建可以用于下载的资源服务器,如nginx,这里我们主要介绍django中的文件下载。
添加首页目录
添加三个视图文件的路由
方式一:使用HttpResponse
这种方式简单粗暴,适合小文件的下载,但如果这个文件非常大,这种方式会占用大量的内存,甚至导致服务器崩溃。其原理是,HttpResponse会先读取文件到内存,然后再输出。
HttpResponse有个很大的弊端,其工作原理是先读取文件,载入内存,然后再输出。如果下载文件很大,该方法会占用很多内存。对于下载大文件,Django更推荐StreamingHttpResponse和FileResponse方法,这两个方法将下载文件分批(Chunks)写入用户本地磁盘,先不将它们载入服务器内存。然而该方法有个问题,如果文件是个二进制文件,HttpResponse输出的将会是乱码。对于一些二进制文件(图片,pdf),我们更希望其直接作为附件下载。
本文共计568个文字,预计阅读时间需要3分钟。
在现实项目中,经常需要使用下载功能,如导出Excel、PDF或下载文件。若能使用Web服务自行搭建可下载的资源服务器,例如Nginx,则更为高效。这里我们主要介绍Django中的文件下载功能。
在实际的项目中很多时候需要用到下载功能,如导excel、pdf或者文件下载,当然你可以使用web服务自己搭建可以用于下载的资源服务器,如nginx,这里我们主要介绍django中的文件下载。
添加首页目录
添加三个视图文件的路由
方式一:使用HttpResponse
这种方式简单粗暴,适合小文件的下载,但如果这个文件非常大,这种方式会占用大量的内存,甚至导致服务器崩溃。其原理是,HttpResponse会先读取文件到内存,然后再输出。
HttpResponse有个很大的弊端,其工作原理是先读取文件,载入内存,然后再输出。如果下载文件很大,该方法会占用很多内存。对于下载大文件,Django更推荐StreamingHttpResponse和FileResponse方法,这两个方法将下载文件分批(Chunks)写入用户本地磁盘,先不将它们载入服务器内存。然而该方法有个问题,如果文件是个二进制文件,HttpResponse输出的将会是乱码。对于一些二进制文件(图片,pdf),我们更希望其直接作为附件下载。

