最近比较穷,接了一个小作业,用Python web做个文件上传、转码、下载小应用。于是用了Django来写,但是下载名每次都是乱码,贴出下载代码:
def download(request):
name = request.GET['filename']
def file_iterator(file_name, chunk_size=512):
with open(file_name, 'rb') as f:
while True:
c = f.read(chunk_size)
if c:
yield c
else:
break
response = StreamingHttpResponse(file_iterator(name))
response['Content-Type'] = 'application/octet-stream'
response['Content-Disposition'] = 'attachment;filename="{0}"'.format(name)
return response
运行截图如下:
于是用F12看了一下:
发现问题出在了 response[‘Content-Disposition’]这里。
后来在网上找了一下资料,结果发现改成这样既可:
response['Content-Disposition'] = "attachment; filename*=utf-8''{}".format(escape_uri_path(name))
另外导入
from django.utils.encoding import escape_uri_path
运行截图: