Python Django下载文件:UnicodeDecodeError
我使用Django 1.11下载文件。这是我的函数Python Django下载文件:UnicodeDecodeError,python,django,Python,Django,我使用Django 1.11下载文件。这是我的函数 def file_downloading(request, filename): path = settings.MEDIA_ROOT+'/' the_file_name = path+filename f_name = filename.split('/')[len(filename.split('/'))-1] wrapper = FileWrapper(open(the_file_name, "r"))
def file_downloading(request, filename):
path = settings.MEDIA_ROOT+'/'
the_file_name = path+filename
f_name = filename.split('/')[len(filename.split('/'))-1]
wrapper = FileWrapper(open(the_file_name, "r"))
content_type = mimetypes.guess_type(the_file_name)[0]
response = HttpResponse(wrapper, content_type=content_type)
response['Content-Length'] = os.path.getsize(path)
response['Content-Disposition'] = 'attachment; filename=%s f_name
return response`
但是当我试图下载.pdf文件时,我遇到了一个UnicodeDecodeError。实际上,它只在文件为.txt时才起作用。当我将包装更改为openfile_name,rb时,文件可以下载,但无法打开。如何处理此问题?尝试向正在打开的文件添加编码,如下所示:
open(the_file_name, 'r', encoding='utf-8')
希望有帮助。Django的HttpResponse类最适合基于文本的响应html页面、txt文件等。。报告解释说: 内容应该是迭代器或字符串。如果它是一个迭代器,它应该返回字符串,这些字符串将连接在一起形成响应的内容。如果它不是迭代器或字符串,则在访问时将转换为字符串 当内容转换为字符串时,可能会引发UnicodeDecodeError。如果要返回PDF文件,文件内容是二进制数据,因此不打算将其转换为字符串
您可以使用该类。它继承自StreamingHttpResponse,因此具有与HttpResponse不同的APi,但返回类似PDF的二进制文件可能会更好。文件名w,try thisTry wrapper=openthe_file_name,rb,意味着删除文件包装器使用os.path.join来构造文件系统路径,而不是字符串concatation,效果更好。这样的代码更便于移植,更易于阅读。wrapper=openthe_file_name,rb It worked!谢谢utf-8“编解码器无法解码第11位的字节0x8f:无效的起始字节我忘记提供此信息…我已经尝试过这种方式…但无论如何,感谢您的帮助。我在浏览器中使用FileResponse并返回错误代码…您能给出一个具体的示例吗?