如何在GAE和Webapp2中以编程方式提供pdf作为下载?

时间:2015-02-13 12:41:47

标签: google-app-engine pdf webapp2

我是使用GAE的新手,我的智慧结束了。

我有一个显示表单的网页,当提交时(使用angularjs $ http)应该导致向用户提供pdf下载。 pdf位于我使用appcfg上传到GAE的文件夹的根目录中,目前可以通过浏览到mydomain / mypdf.pdf来查看。

处理返回pdf的代码在这里:

import os
import webapp2

class ServePDF(webapp2.RequestHandler):
    def post(self):
        q = 'mypdf.pdf'
        self.response.headers['Content-Type'] = 'application/octet-stream'
        self.response.headers['Content-Disposition'] = 'attachment; filename="%s"' % q
        self.response.out.write (open(os.path.dirname(__file__) + '/' + q).read())

app = webapp2.WSGIApplication([
    ('/servepdf', ServePDF)
], debug=True)

我的app.yaml看起来像这样:

application: myapp
version: 1
runtime: python27
api_version: 1
threadsafe: true

handlers:
- url: /(.*\.(gif|png|jpg|ico|js|css))
  static_files: \1
  upload: (.*\.(gif|png|jpg|ico|js|css))

- url: /mypdf.pdf
  static_files: mypdf.pdf
  upload: mypdf.pdf 

- url: /robots.txt
  static_files: robots.txt
  upload: robots.txt 

- url: .*
  script: main.app

libraries:
- name: webapp2
  version: latest

我看到的是pdf从未出现由于500(内部服务器错误)而Google开发者控制台给出了我的回复:

  File "/base/data/home/apps/myapp/1.382205997234590276/main.py", line 9, in post
    self.response.out.write (open(os.path.dirname(__file__) + '/' + q).read())
IOError: [Errno 2] No such file or directory: '/base/data/home/apps/myapp/1.382205997234590276/mypdf.pdf'

我的app.yaml可能有问题吗?谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

您的mypdf.pdf未设置为应用程序可读。你可以在app.yaml

中做到这一点
- url: /mypdf.pdf
  static_files: mypdf.pdf
  upload: mypdf.pdf 
  application_readable: true