Python 用GAE发送_blob
我在GAE中的blobstore中创建了zip文件,然后我尝试使用以下代码获取(下载)此zip文件:Python 用GAE发送_blob,python,google-app-engine,blobstore,Python,Google App Engine,Blobstore,我在GAE中的blobstore中创建了zip文件,然后我尝试使用以下代码获取(下载)此zip文件: def send_blob(blob_key_or_info, content_type=None, save_as=None): CONTENT_DISPOSITION_FORMAT = "attachment; filename=\"%s\"" if isinstance(blob_key_or_info, blobstore.BlobInfo): blo
def send_blob(blob_key_or_info, content_type=None, save_as=None):
CONTENT_DISPOSITION_FORMAT = "attachment; filename=\"%s\""
if isinstance(blob_key_or_info, blobstore.BlobInfo):
blob_key = blob_key_or_info.key()
blob_info = blob_key_or_info
else:
blob_key = blob_key_or_info
blob_info = None
if blob_info:
content_type = content_type or mime_type(blob_info.filename)
save_as = save_as or blob_info.filename
#print save_as
logging.debug(blob_info)
response = Response()
response.headers[blobstore.BLOB_KEY_HEADER] = str(blob_key)
if content_type:
if isinstance(content_type, unicode):
content_type = content_type.encode("utf-8")
response.headers["Content-Type"] = content_type
else:
del response.headers["Content-Type"]
def send_attachment(filename):
if isinstance(filename, unicode):
filename = filename.encode("utf-8")
response.headers["Content-Disposition"] = (\
CONTENT_DISPOSITION_FORMAT % filename)
if save_as:
if isinstance(save_as, basestring):
send_attachment(save_as)
elif blob_info and save_as is True:
send_attachment(blob_info.filename)
else:
if not blob_info:
raise ValueError("Expected BlobInfo value for blob_key_or_info.")
else:
raise ValueError("Unexpected value for save_as")
return response
如果我在main中调用这个函数并从这个函数(response)中打印返回值,我会得到例如:
200行
内容长度:0
X-AppEngine-BlobKey:C25nn_O04JT0r8kwHeabDw==
内容类型:应用程序/zip
内容处置:附件;filename=“test.zip”
但问题是,我现在如何使用此响应将文件下载到我的PC?
提前感谢。您需要实现一个Blobstore下载处理程序来为文件提供服务。例如:
from google.appengine.ext.webapp import blobstore_handlers
class ServeZip(blobstore_handlers.BlobstoreDownloadHandler):
def get(self):
blob_key = self.request.get('key')
if not blobstore.get(blob_key):
logging.info('blobstore.get(%s) failed' % blob_key)
self.error(404)
return
self.send_blob(blob_key)
return
然后在客户机上调用:http://yourapp.appspot.com/servezip?key=
对于上面的示例:
http://yourapp.appspot.com/servezip?key=C25nn_O04JT0r8kwHeabDw%3D%3D
您需要实现一个Blobstore下载处理程序来为文件提供服务。例如:
from google.appengine.ext.webapp import blobstore_handlers
class ServeZip(blobstore_handlers.BlobstoreDownloadHandler):
def get(self):
blob_key = self.request.get('key')
if not blobstore.get(blob_key):
logging.info('blobstore.get(%s) failed' % blob_key)
self.error(404)
return
self.send_blob(blob_key)
return
然后在客户机上调用:http://yourapp.appspot.com/servezip?key=
对于上面的示例:
http://yourapp.appspot.com/servezip?key=C25nn_O04JT0r8kwHeabDw%3D%3D
Google提供了非常好的api来处理BlobStore对象,主要是两个名为BlobstoreDownloadHandler和BlobstoreUploadHandler的CLS
要下载内容,请尝试使用BlobstoreDownloadHandler,下面的代码可以帮助您理解这个概念
from google.appengine.ext.webapp import blobstore_handlers
from google.appengine.ext.blobstore import BlobKey
class VideoDownloadHelper(blobstore_handlers.BlobstoreDownloadHandler):
def get(self, blobkey):
blobKey = BlobKey(blobkey)
#content_type is optional and by default it is same as uploaded content's content-type.
self.send_blob(blobKey, content_type="image/jpeg")
这个方法可以像这样使用
app = webapp2.WSGIApplication([(r'/download-video/([^\.]+)', VideoDownloadHandler)])
为了进一步阅读,你可以阅读以下内容
谷歌提供了非常好的api来处理BlobStore对象,主要是两个名为BlobstoreDownloadHandler和BlobstoreUploadHandler的CLS 要下载内容,请尝试使用BlobstoreDownloadHandler,下面的代码可以帮助您理解这个概念
from google.appengine.ext.webapp import blobstore_handlers
from google.appengine.ext.blobstore import BlobKey
class VideoDownloadHelper(blobstore_handlers.BlobstoreDownloadHandler):
def get(self, blobkey):
blobKey = BlobKey(blobkey)
#content_type is optional and by default it is same as uploaded content's content-type.
self.send_blob(blobKey, content_type="image/jpeg")
这个方法可以像这样使用
app = webapp2.WSGIApplication([(r'/download-video/([^\.]+)', VideoDownloadHandler)])
为了进一步阅读,你可以阅读以下内容
:当我将这个类处理程序放在单独的页面中,然后将密钥传递给它时,问题是:状态:404未找到内容类型:text/html;charset=utf-8缓存控制:无缓存过期:Fri,1990年1月1日00:00:00 GMT内容长度:0,处理程序未执行。对此问题有何想法?您是否在日志中看到“blobstore.get(…)failed”错误?如果是这样,您可能传递了错误的密钥,或者未能正确地对密钥进行URL编码。如果没有,您可能没有在应用程序中正确添加处理程序。yaml.:当我将此类处理程序放在单独的页面中,然后将密钥传递给它时,问题是:状态:404未找到内容类型:text/html;charset=utf-8缓存控制:无缓存过期:Fri,1990年1月1日00:00:00 GMT内容长度:0,处理程序未执行。对此问题有何想法?您是否在日志中看到“blobstore.get(…)failed”错误?如果是这样,您可能传递了错误的密钥,或者未能正确地对密钥进行URL编码。否则,您可能没有在app.yaml中正确添加处理程序。