前言
文件的上传与下载是大部分网站必不可少的一部分。本文将对文件的上传和下载进行说明。
一、文件下载功能
views.py文件函数中的响应内容除了返回网页信息,其实还可以实现返回文件,即实现文件下载功能。
实现文件下载的相关类或方法
- HttpResponse:是响应过程的核心类,它的底层功能类是HttpResponseBase.实现文件下载功能具有很大的弊端,其工作原理:将文件读取到内存,然后输出到浏览器上实现下载功能。不推荐使用,下载文件过大,则会占用过多内存
- StreamingHttpResponse:是在HttpResponseBase的基础上进行继承与重写的,它实现流式响应输出【使用python迭代器将数据分段处理并传输】,使用于大规模数据响应和文件传输响应。参数介绍,如下部分源码
def __init__(self, streaming_content=(), *args, **kwargs):
....
- streaming_content:代表文件或数据内容。可以为迭代器对象或字节流
- *args, **kwargs:可以设置响应内容的数据格式content_type、响应状态码
- FileResponse:在StreamingHttpResponse上继承和重写的,它适用于文件的流式响应输出,只用于文件的传输响应。参数介绍:
def __init__(self, *args, as_attachment=False, filename='', **kwargs):
- as_attachment:是否提供文件下载功能,False文件会在浏览器中打开,打不开才会将文件内容下载到本地,但没有设置文件后缀名,此时filename不起作用。
- filename:设置文件名,filename与as_attachment有关,as_attachment为Flase则不起作用。若as_attachment为True,但filename为空则默认为原文件的名字
文件下载实例
from django.shortcuts import render
from django.http import HttpResponse, Http404