【问题标题】:Get(Serve) files from the blobstore in GAE从 GAE 中的 blobstore 获取(服务)文件
【发布时间】:2012-03-26 21:33:33
【问题描述】:

我做过一个小项目;这个项目的主要功能如下:

1-从用户PC上传文件(使用HTML文件上传(表单提交))

2-将这些上传的文件压缩成单个 zip 存档。

3-将此 Zip 文件存储在 GAE BlobStore 中。

4-从 blobstore 获取(服务)此 zip 到 PC(下载此 zip 以在本地使用)。

步骤 1,2 和 3 已正确完成,但步骤 4 中的问题;我无法从 blobstore 下载此 Zip; 这是我使用的代码:

from __future__ import with_statement
from google.appengine.api import files
import cgi, cgitb ; cgitb.enable()
import StringIO
import zipfile
from google.appengine.ext import blobstore
from google.appengine.ext import webapp
from google.appengine.ext.webapp import blobstore_handlers
from google.appengine.ext.webapp.util import run_wsgi_app
glob_blob_info="" 
class zip():
    def z(self):
        form = cgi.FieldStorage()
        zipstream=StringIO.StringIO()
        zfile = zipfile.ZipFile(file=zipstream,mode="w",compression=zipfile.ZIP_DEFLATED)
        file_upload = form['file[]']
        filename2 = file_upload.filename
        data=file_upload.file.read()
        zfile.writestr(filename2,data)
        zfile.close()
        zipstream.seek(0)
        zip_file = files.blobstore.create(mime_type='application/zip',_blobinfo_uploaded_filename='test.zip')
        with files.open(zip_file, 'a') as f:
            f.write(zipstream.getvalue())
        files.finalize(zip_file)
        blob_key = files.blobstore.get_blob_key(zip_file)
        print blob_key
        blob_info = blobstore.BlobInfo.get(blob_key)
        print blob_info
        global glob_blob_info
        glob_blob_info=blob_info
class ServeHandler(blobstore_handlers.BlobstoreDownloadHandler):
  def get(self):
    print "doaa"
    global glob_blob_info 
    glob_blob_info = urllib.unquote(glob_blob_info)
    blob_info = blobstore.BlobInfo.get(glob_blob_info)
    self.send_blob(glob_blob_info,save_as=True)



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

if __name__ == "__main__":
    main()

现在class zip() 已成功执行,包含用户上传的文件的 zip 存档已在 GAE Blobstore 中成功创建,但问题正是 class ServeHandler(blobstore_handlers.BlobstoreDownloadHandler): 没有执行 当我运行这段代码时,我有这个输出:

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

对这个问题有什么想法吗?在此先感谢。

【问题讨论】:

  • 请停止发布几乎相同的问题。
  • Send_blob in GAE的可能重复
  • @Nick Johnson:很抱歉,但问题依然存在!!!
  • @Eng_Engineer:编辑你的第一个问题比打开几乎相同的第二个问题要好得多(即使问题仍然存在)。
  • @Stefan:是的,那是正确的,很抱歉,你明白我在这篇文章中的问题吗??

标签: python google-app-engine blobstore


【解决方案1】:

here 描述的 blob 提供服务的哪一部分不适合您?

【讨论】:

  • :这个类没有执行(类ServeHandler)这是我的问题??
  • :main() 中的应用程序本身没有执行。
【解决方案2】:

我知道这可能很明显,但您的 app.yaml 是否设置为处理该应用程序路径?那会给你一个404。另外你为什么在这里使用全局?我会避免这种情况。将 URL 安全 blob 密钥作为 URL 的一部分或 URL 参数传递给它,并从中获取 blob 信息。如果您将 global 与 appengine 一起使用,您将遇到各种潜在问题。

我已经使用 blob 存储来处理各种文件之类的事情,但从未遇到过问题。它最有可能是您的代码/应用程序的问题,而不是 send_blob 的任何问题。

【讨论】:

  • :我尝试过这种方法通过 URL 传递 blobinfo,但问题是我无法从类 ServerHandler 中的 URL 获取此密钥(信息)?
猜你喜欢
  • 1970-01-01
  • 2013-03-14
  • 1970-01-01
  • 2011-05-02
  • 2012-10-17
  • 1970-01-01
  • 1970-01-01
  • 2014-10-10
  • 2013-02-23
相关资源
最近更新 更多