2012-03-19 48 views
1

我使用python开发Google应用程序引擎。我创建了zip存档到blobstore,但是当我尝试下载此文件时出现问题。从谷歌应用程序中的blobstore下载zip档案

我将展示一些细节:首先,我在blob上创建了这个存档,然后我得到了这个上传文件的关键。我想在URL发送此项另一个Python页面这样的:

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

现在,我试图让从网址为重点: self.request.get(“钥匙” ),但它不起作用。

在这个页面中,我写

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() 
+1

你确实真的不想用'print'语句生成HTML输出。只是不要这样做。花一点时间学习Python模板引擎。 Django 1.2引擎包含在AppEngine SDK中。 – 2012-03-19 22:07:28

+0

Jinja也包含在Python 2.7中。 – 2012-03-20 10:57:48

回答

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) 
+0

Sir.Stuart,是的,我在download.py页面中使用了这个类,但问题恰恰是我无法从我在该页面创建zip归档的上一页获取密钥。 – 2012-03-19 22:33:45

+0

Sir.Adam我使用eclipse作为java开发人员,它支持HTML,但href中的动作正确地如下所示: http:// localhost:8080/download.py?key = xuMgQfOSPo1n2YOYhm1Eow ==,但问题是我无法从网址获得此密钥,感谢您的帮助,请问您有什么想法? – 2012-03-19 22:38:10

+0

你是如何创建zip的?再一次,这个例子非常清楚如何重定向到下载处理器来发送blob。 – 2012-03-19 23:06:50

1

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

+0

,我从您的评论明白,我不能传递任何参数(如在我的代码键)从蟒蛇页面到另一个?但我能做什么这个问题,因为在第一页,我在blobstore上创建zip并将此zip的密钥发送到其他python页面。 – 2012-03-20 11:11:58

+0

@Eng_Engineer您可以很好地传递查询字符串参数 - 再次查看任何示例入门指南。在你做任何这些之前,你必须了解在App Engine中编写应用程序的基础知识;其中包括将URL映射到处理程序。 – 2012-03-20 11:23:30

+0

:我写的zip包到Blob存储在应用程序引擎,它的工作正常,如本指南http://code.google.com/appengine/docs/python/blobstore/overview.html#Writing_Files_to_the_Blobstore 但问题在什么时候我从存储中下载或获取这个blob(zip)。 – 2012-03-20 11:33:46

相关问题