Google App Engine 中的用户可下载 PDF 返回损坏的 PDF

User downloadable PDFs in Google App Engine returning corrupted PDFs

我创建了一个 python 脚本,它使用 reportlab 从提供的用户数据生成 PDF。当我从命令行 运行 脚本时,PDF 下载正常并且一切正常。但是,当我尝试像这样将文件传递给 Google App Engine 时:

...

outputstream = StringIO.StringIO()
PDF = output.write(outputstream)

class PDFHandler(webapp2.RequestHandler):
    def get(self):
        self.response.headers['Content-Type'] = 'application/pdf'
        self.response.headers['Content-Disposition'] = 'attachment; filename=Myfile.pdf'
        self.response.headers['Content-Transfer-Encoding'] = 'binary'
        self.response.out.write(PDF)

和 运行 开发服务器,PDF 下载,但是当我尝试打开它时,chrome 说它无法打开文件,Ubuntu 的文档查看器说 "can't open plain/text document",即使当我检查文档的属性时它显示 'application/pdf' 并且它有适当的 .pdf 后缀,当我尝试在 GIMP 图像查看器中打开它时,它显示 "document is damaged."我将文件传递给 webapp2 处理程序的方式有问题吗?任何帮助将不胜感激!

我通过复习一些旧教程解决了这个问题。在最后一行代码中,我忽略了将 .getvalue() 包含到输出中:

outputstream = StringIO.StringIO()
PDF = output.write(outputstream)

class PDFHandler(webapp2.RequestHandler):
    def get(self):
        self.response.headers['Content-Type'] = 'application/pdf'
        self.response.headers['Content-Disposition'] = 'attachment; filename=Myfile.pdf'
        self.response.headers['Content-Transfer-Encoding'] = 'binary'
        self.response.out.write(PDF.getvalue())