【问题标题】:Return file as a download in Django Python在 Django Python 中将文件作为下载返回
【发布时间】:2019-10-17 09:16:11
【问题描述】:

我使用 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)

谁能帮帮我?

【问题讨论】:

    标签: python django file pdf


    【解决方案1】:

    对比保存 FPDF 的文件和 HTTP Response 发送的文件,我意识到存在编码错误,所以我在官方文档中找到了这个。

    注意:在 Python 2 中,字符串是原始数据,但在 Python 3 中,字符串现在默认为 unicode。如果您使用的是 Python 3.x,则必须使用 pdf.output(dest='S').encode('latin-1') 才能获得输出,如果您不这样做,生成的 PDF 将无效,并且取决于查看器根本不打开或显示为一些空白页。

    我尝试将它编码为latin-1,它终于可以工作了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-21
      • 2021-12-05
      • 1970-01-01
      • 1970-01-01
      • 2019-01-04
      • 2019-12-01
      • 1970-01-01
      相关资源
      最近更新 更多