从Google AppEngine中的blobstore下载zip存档

时间:2012-03-19 21:31:32

标签: python google-app-engine

我使用python在Google应用引擎上工作。我创建了zip存档到blobstore,但是当我尝试下载这个文件时出现问题。

我将展示一些细节:首先,我在blob上创建了这个存档,然后我得到了这个上传文件的密钥。我想将这个键在url中发送到另一个这样的python页面:

print'<a href="download.py?key=%s">Save Zip</a>' % blob_key

现在在download.py页面中,我试图从网址获取密钥: self.request.get('key'),但它不起作用。

在这个页面我写了

class ServeHandler(blobstore_handlers.BlobstoreDownloadHandler):

......等

这是我用来下载zip的唯一一个类,但问题是我无法获取密钥,当我运行应用程序时,我遇到了这个问题:

****Status: 404 Not Found
Content-Type: text/html; charset=utf-8
Cache-Control: no-cache
Expires: Fri, 01 Jan 1990 00:00:00 GMT
Content-Length: 0****

app.yaml代码:

application: cloudcomputingproject20122012
version: 1
runtime: python
api_version: 1

handlers:
- url: /compress.py
  script: compress.py
- url: /decompress.py
  script: decompress.py
- url: (.*)/
  static_files: static\1/index.html
  upload: static/index.html

现在在compress.py我创建了两个类;创建zip,将其存储在blobstore上,获取此存储文件的bob键然后我将blob键定义为全局变量,现在在服务处理程序类中我尝试下载此zip,但我不能。

class ServeHandler(blobstore_handlers.BlobstoreDownloadHandler):
  def get(self):

    global x 
    #x="tvsD0KgYxX85hyC9wJHsqw=="
    print x
    x = str(urllib.unquote(x))
    blob_info = blobstore.BlobInfo.get(x)
    self.send_blob(blob_info,save_as=True)



def main():
    application = webapp.WSGIApplication( [('/serve', ServeHandler),], debug=True)
    c=zip()
    c.z()
    run_wsgi_app(application)

if __name__ == "__main__":
    main()

2 个答案:

答案 0 :(得分:1)

App Engine上的Python与PHP不同 - 请求URL不直接映射到文件名;您不能指向/download.php并期望将请求路由到您的处理程序。您需要将处理程序映射到URL,然后在该URL处指向请求;有关示例,请参阅任何入门教程。

答案 1 :(得分:0)

您是否看过示例here?看起来你做的完全一样。

class ServeHandler(blobstore_handlers.BlobstoreDownloadHandler):
  def get(self, resource):
    resource = str(urllib.unquote(resource))
    blob_info = blobstore.BlobInfo.get(resource)
    self.send_blob(blob_info)