google appengine - 让用户下载文件

时间:2011-11-18 06:57:36

标签: python google-app-engine

class PDF(webapp.RequestHandler):
    def get(self):
        self.response.headers['Content-Type'] = "application/txt"
        self.response.headers['Content-Disposition'] = "attachment; filename=file.pdf"
        f = open('/Users/BP/file.pdf', 'r')
        self.response.out.write(f.read())
def main():
    application = webapp.WSGIApplication([('/download', PDF)],
                                        debug=False)
    util.run_wsgi_app(application)

我尝试下载时遇到此错误:

[Errno 13] Permission denied: '/Users/BP/file.pdf'
Traceback (most recent call last):
  File "/base/python_runtime/python_lib/versions/1/google/appengine/ext/webapp/_webapp25.py", line 701, in __call__
    handler.get(*groups)
  File "/base/data/home/apps/s~projectname/1.354763951774324185/main.py", line 43, in get
    f = open('/Users/BP/file.pdf', 'r')
IOError: [Errno 13] Permission denied: '/Users/BP/file.pdf'

即使我尝试了chmod a+r file.pdf 请帮忙。谢谢!

4 个答案:

答案 0 :(得分:3)

os.path.dirname(__file__)为您提供应用程序目录。

f = open(os.path.dirname(__file__) + /'BP/file.pdf', r)

将文件存储在主文件夹内的BP /文件夹中。

@Nicke,@ Jon:GAE允许访问您的文件。 “愿来源与你同在”。

答案 1 :(得分:2)

GAE无法访问文件。如果要提供文件,请从静态目录或blobstore提供。

答案 2 :(得分:2)

运行AppEngine的用户没有对目录的读访问权限。尝试chmod BP目录。

但即便如此,一旦部署应用程序,这将无效。 App Engine中没有文件系统的概念。我建议您将文件存储在blob或数据存储中。或静态目录。

答案 3 :(得分:0)

也可以提供静态文件,不需要这个

的处理程序
- url: /sampleData\.csv
  static_files: sampleData.txt
  upload: sampleData\.csv
  http_headers:
    Content-Type: text/csv
    Content-Disposition: "attachment; filename=sample.csv"