Google app engine Appengine提供gzip文件

Google app engine Appengine提供gzip文件,google-app-engine,gzip,blobstore,Google App Engine,Gzip,Blobstore,我正在使用AppEngine在我的应用程序中存储一些pickle python对象。我想直接将这些文件提供给用户,我只是简单地使用X-AppEngine-Blobkey头文件将文件提供给带有file.pickle.gz文件名的用户。但是,当我试图在我的计算机(Mac OS)上用简单的双击来提取这些文件时,这些文件会变成file.pickle.gz.cpgz 我以为是我的浏览器偷偷摸摸地把它们取出来了,但我不这么认为,因为 pickle.load('file.pickle.gz') 不起作用,也

我正在使用AppEngine在我的应用程序中存储一些pickle python对象。我想直接将这些文件提供给用户,我只是简单地使用
X-AppEngine-Blobkey
头文件将文件提供给带有
file.pickle.gz
文件名的用户。但是,当我试图在我的计算机(Mac OS)上用简单的双击来提取这些文件时,这些文件会变成
file.pickle.gz.cpgz

我以为是我的浏览器偷偷摸摸地把它们取出来了,但我不这么认为,因为

pickle.load('file.pickle.gz')
不起作用,也不起作用

pickle.load('file.pickle.gz.cpgz') 
要存储文件,我使用:

    blobfile = files.blobstore.create(mime_type='application/gzip')
    with files.open(blobfile, 'a') as f:
        gz = gzip.GzipFile(fileobj=f,mode='wb')
        gz.write(my_pickled_object)
        gz.close()
    files.finalize(blobfile)

我想我不理解GZIP的工作方式。有人能解释一下吗?

你确定
file.pickle.gz.cpgz
是你双击下载的
file.pickle.gz
文件的结果吗?通常,.cpgz是另一种归档文件

我可以获得您发布到开发服务器中的代码,而无需进行重大更改。下面是代码,如果有帮助的话:

#!/usr/bin/env python

from __future__ import with_statement
import gzip
import pickle
from google.appengine.api import files
from google.appengine.api import memcache
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 import util

class MainHandler(webapp.RequestHandler):
    def get(self):
        self.response.out.write('Hello world! <a href="/make">make</a> <a href="/get">get</a>')

class MakeFileHandler(webapp.RequestHandler):
    def get(self):
        data = pickle.dumps({'a':1, 'b':True, 'c':None})

        blobfile = files.blobstore.create(mime_type='application/gzip')
        with files.open(blobfile, 'a') as f:
            gz = gzip.GzipFile(fileobj=f,mode='wb')
            gz.write(data)
            gz.close()
        files.finalize(blobfile)
        memcache.set('filekey', files.blobstore.get_blob_key(blobfile))
        self.redirect('/')

class GetFileHandler(blobstore_handlers.BlobstoreDownloadHandler):
    def get(self):
        blobkey = memcache.get('filekey')
        if blobkey:
            self.send_blob(blobkey)
        else:
            self.response.out.write('No data key set <a href="/">back</a>')

def main():
    application = webapp.WSGIApplication([('/', MainHandler),
                                          ('/make', MakeFileHandler),
                                          ('/get', GetFileHandler)],
                                         debug=True)
    util.run_wsgi_app(application)

if __name__ == '__main__':
    main()

您确定双击您下载的
文件.pickle.gz
文件是
文件.pickle.gz
的结果吗?通常,.cpgz是另一种归档文件

我可以获得您发布到开发服务器中的代码,而无需进行重大更改。下面是代码,如果有帮助的话:

#!/usr/bin/env python

from __future__ import with_statement
import gzip
import pickle
from google.appengine.api import files
from google.appengine.api import memcache
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 import util

class MainHandler(webapp.RequestHandler):
    def get(self):
        self.response.out.write('Hello world! <a href="/make">make</a> <a href="/get">get</a>')

class MakeFileHandler(webapp.RequestHandler):
    def get(self):
        data = pickle.dumps({'a':1, 'b':True, 'c':None})

        blobfile = files.blobstore.create(mime_type='application/gzip')
        with files.open(blobfile, 'a') as f:
            gz = gzip.GzipFile(fileobj=f,mode='wb')
            gz.write(data)
            gz.close()
        files.finalize(blobfile)
        memcache.set('filekey', files.blobstore.get_blob_key(blobfile))
        self.redirect('/')

class GetFileHandler(blobstore_handlers.BlobstoreDownloadHandler):
    def get(self):
        blobkey = memcache.get('filekey')
        if blobkey:
            self.send_blob(blobkey)
        else:
            self.response.out.write('No data key set <a href="/">back</a>')

def main():
    application = webapp.WSGIApplication([('/', MainHandler),
                                          ('/make', MakeFileHandler),
                                          ('/get', GetFileHandler)],
                                         debug=True)
    util.run_wsgi_app(application)

if __name__ == '__main__':
    main()

你说得对,我的代码起作用了。“您是否尝试过将其关闭并再次打开?”。您是对的,我的代码工作正常。“你有没有试过把它关掉再打开?”。