python - 在 Django Python 中将文件作为下载返回
问题描述
我使用 Django 创建了一个站点,并创建了一个从数据库数据返回自动生成的 pdf 的函数。
为了制作 PDF,我使用 pyFPDF。
pdfreport = FPDF()
#Code for the PDF here
pdfreport.output(name='mypdf.pdf')
使用此代码一切正常,PDF 已正确生成。但是为了将文件作为 HTTP 响应返回,我保存文件 dest='S'
并做出响应。
pdf = pdfreport.output(dest='S')
response = = HttpResponse(pdf, content_type='application/pdf')
response['Content-Disposition'] = 'attachment; filename="mypdf.pdf"'
return(response)
使用它,响应是正确的,我得到了要保存的文件,浏览器将文件加载为 pdf,但 pdf 是空白的。我不知道为什么会这样。
我尝试保存文件,打开文件open()
并附加其内容,但我仍然得到相同的结果,一个空白的 pdf。
pdfreport.output(name=pdfname)
pdf = open(pdfname, 'r')
response = HttpResponse(pdf, content_type='application/pdf')
response['Content-Disposition'] = 'attachment; filename="mypdf.pdf"'
return(response)
任何可以帮助我的人吗?
解决方案
比较保存 FPDF 的文件和 HTTP 响应发送的文件,我意识到有一个编码错误,所以我在官方文档中找到了这个。
注意:在 Python 2 中,字符串是原始数据,但在 Python 3 中,字符串现在默认是 unicode。如果您使用的是 Python 3.x,则必须使用 Python 3.x
pdf.output(dest='S').encode('latin-1')
才能获得输出,如果不这样做,生成的 PDF 将无效,并且取决于查看器,要么根本不打开,要么显示为一些空白页。
我尝试了它的编码latin-1
,它终于可以工作了。
推荐阅读
- ansible - Jinja2 - for 循环中的全局变量更新
- c++ - 递归地将给定的字符串转换为它所代表的数字
- git - 如何在 SourceTree 中包含丢失的文件?
- java - 如何使用 AWS 运行我的 map-reduce 程序?
- angular - 如何定期从后端 SignalR 的新时间数据更新时钟
- scala - 当它被扩展时,它是特征的一部分吗?
- c# - 我无法将列表视图项目保存到数据库
- scroll - 无法在移动设备上使用 OpenLayers 地图滚动页面
- testing - KoinAppAlreadyStartedException:一个 Koin 应用程序已经启动
- joomla - 如何修复“Chrome 问题网站无法正确加载 (Joomla)”