一些Google App Engine BlobStore问题
我在网上查了很多资料,也看了Google App Engine官网关于BlobStore的文档,但还是有一些问题不太明白。我的平台是webapp。
我读过的文档有:
看完这些文档后,我还是有一些问题:
在Blobstore Python API概述中提到:应用通过一次API调用可以读取的Blobstore数据的最大大小是1MB。这是什么意思?这个1MB的限制适用于
sendblob()
吗?比如说,下面这段代码来自webapp Blobstore处理程序:class ViewPhotoHandler(blobstore_handlers.BlobstoreDownloadHandler): def get(self, photo_key): self.send_blob(photo_key)
这是否意味着与
photo_key
关联的照片(上传并存储在blobstore中)必须小于1MB?从上下文来看,我觉得不是。我认为照片可以大到2GB。但我不太确定。在
send_blob()
中,ContentType是怎么确定的?是text/html还是image/jpeg?我可以自己设置吗?来自webapp Blobstore处理程序的解释让我很困惑。对于非英语使用者来说,理解起来很困难。能不能有人用代码示例来解释一下?send_blob()
的文档在哪里?我找不到。send_blob()
方法接受一个save_as参数,这个参数决定了blob数据是作为原始响应数据发送,还是作为带有文件名的MIME附件发送,这样浏览器会提示用户保存文件,而不是直接显示。如果这个参数是一个字符串,blob就会作为附件发送,字符串值会被用作文件名。如果值为True,并且blob_key_or_info是一个BlobInfo对象,那么就会使用该对象中的文件名。默认情况下,blob数据会作为响应的主体发送,而不是作为MIME附件。有一个文件http://www.example.com/example.avi,大小是20MB甚至2GB。我想从互联网上获取example.avi并存储到BlobStore中。我查过,urlfetch请求的大小限制是1MB。我搜索了很多,但没有找到解决办法。
非常感谢!
1 个回答
send_blob()
这个函数不需要你的应用程序从API读取文件,所以1MB的限制不适用。返回给用户的前端服务会读取整个blob,并把所有内容都放在响应中返回给用户(它可能是分块读取的,但这只是实现细节,你不需要担心这个)。send_blob()
会把内容类型设置为Blob内部存储的类型,或者你可以通过可选的content_type
参数来指定类型。关于文档,似乎需要去查阅一下;在google.appengine.ext.webapp.blobstore_handlers
包里有相关的说明。其实没有特别好的办法可以从网上获取任意文件并存储到Blobstore里。你很可能需要在其他地方运行一个服务,比如你自己的电脑或者一个EC2实例,来获取这些文件并把它们POST到你应用里的blobstore处理程序。