django中文件下载(HttpResponse)
2014-08-23 11:45
267 查看
最近一个用django开发的web项目要进行数据的导入导出,所以有必要了解下。
django中主要用HttpResponse将请求结果返回给浏览器,所以文件的下载也是通过改对象进行处理的,具体的一个列子的代码如下:
#文件下载
def download(request):
"""
Send a file through Django without loading the whole file into
memory at once. The FileWrapper will turn the file object into an
iterator for chunks of 8KB.
"""
#读取mongodb的文件到临时文件中
fileid_=request.GET["fileid"]
filepath_ = ('%s/%s'%(MEDIA_ROOT, fileid_)) #文件全路径
file_=TFiles.objects.get(fileid=int(fileid_))
filename_=file_.filename
filetype_=file_.filetype
if os.path.isfile(filepath_):
pass
else:
mongoLoad(fileid_)
#下载文件
def readFile(fn, buf_size=262144):#大文件下载,设定缓存大小
f = open(fn, "rb")
while True:#循环读取
c = f.read(buf_size)
if c:
yield c
else:
break
f.close()
response = HttpResponse(readFile(filepath_), content_type='APPLICATION/OCTET-STREAM') #设定文件头,这种设定可以让任意文件都能正确下载,而且已知文本文件不是本地打开
response['Content-Disposition'] = 'attachment; filename='+filename_.encode('utf-8') + filetype_.encode('utf-8')#设定传输给客户端的文件名称
response['Content-Length'] = os.path.getsize(filepath_)#传输给客户端的文件大小
return response
django中主要用HttpResponse将请求结果返回给浏览器,所以文件的下载也是通过改对象进行处理的,具体的一个列子的代码如下:
#文件下载
def download(request):
"""
Send a file through Django without loading the whole file into
memory at once. The FileWrapper will turn the file object into an
iterator for chunks of 8KB.
"""
#读取mongodb的文件到临时文件中
fileid_=request.GET["fileid"]
filepath_ = ('%s/%s'%(MEDIA_ROOT, fileid_)) #文件全路径
file_=TFiles.objects.get(fileid=int(fileid_))
filename_=file_.filename
filetype_=file_.filetype
if os.path.isfile(filepath_):
pass
else:
mongoLoad(fileid_)
#下载文件
def readFile(fn, buf_size=262144):#大文件下载,设定缓存大小
f = open(fn, "rb")
while True:#循环读取
c = f.read(buf_size)
if c:
yield c
else:
break
f.close()
response = HttpResponse(readFile(filepath_), content_type='APPLICATION/OCTET-STREAM') #设定文件头,这种设定可以让任意文件都能正确下载,而且已知文本文件不是本地打开
response['Content-Disposition'] = 'attachment; filename='+filename_.encode('utf-8') + filetype_.encode('utf-8')#设定传输给客户端的文件名称
response['Content-Length'] = os.path.getsize(filepath_)#传输给客户端的文件大小
return response
相关文章推荐
- Response对象、HttpServletResponse简介、处理字节编码问题、实现动态文件下载
- HttpServletResponse response(中文乱码、文件下载、定时刷新、控制缓存、重定向、注意事项)
- C#中网页文件下载——HttpWebRequest与HttpWebResponse的使用方法
- .Net 使用HttpWebRequest 和 HttpWebResponse 下载文件
- HttpServletResponse-完成文件下载
- HttpServletResponse的字符字节输出流、编码、文件下载、Captcha图片与HttpServletRequest获取request数据表单非表单数据、重定向与转发
- Response对象、HttpServletResponse简介、处理字节编码问题、实现动态文件下载
- 笔记5:利用HttpWebResponse下载文件,显示下载文件大小、网速、完成大小
- (5A)HttpServletResponse:getWriter和getOutputStream()、sendRedirect()、session(简单理解)、文件下载、页面缓存
- Java文件下载:如何编码文件名称以及如何设置HttpServletResponse
- 利用response和HttP中的Content-Disposition: attachment; filename=aaa.zip响应头,实现简单的文件下载
- 【JavaWeb-6】HttpServletResponse的字符字节输出流、编码、文件下载、Captcha图片与HttpServletRequest获取request数据表单非表单数据、重定向与转发
- HttpServletResponse response(中文乱码、文件下载、定时刷新、控制缓存、重定向、注意事项)
- http协议之response案例四:以下载方式打开资源/下载文件
- 使用HttpWebRequest以及HttpWebResponse下载Http远程文件[转]
- 用HttpListener实现文件下载
- ASP.NET 2.0 HttpHandler实现对某种文件类型权限保护(示例代码下载)
- Java实现HTTP文件下载
- 远程下载http文件--利用WinInet类(转)
- ASP.NET 2.0 HttpHandler实现对某种文件类型权限保护(示例代码下载)