一些Google App Engine BlobStore问题

2 投票
1 回答
688 浏览
提问于 2025-04-16 20:49

我在网上查了很多资料,也看了Google App Engine官网关于BlobStore的文档,但还是有一些问题不太明白。我的平台是webapp。

我读过的文档有:

看完这些文档后,我还是有一些问题:

  1. 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。但我不太确定。

  2. 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附件。

  3. 有一个文件http://www.example.com/example.avi,大小是20MB甚至2GB。我想从互联网上获取example.avi并存储到BlobStore中。我查过,urlfetch请求的大小限制是1MB。我搜索了很多,但没有找到解决办法。

非常感谢!

1 个回答

2
  1. send_blob() 这个函数不需要你的应用程序从API读取文件,所以1MB的限制不适用。返回给用户的前端服务会读取整个blob,并把所有内容都放在响应中返回给用户(它可能是分块读取的,但这只是实现细节,你不需要担心这个)。

  2. send_blob() 会把内容类型设置为Blob内部存储的类型,或者你可以通过可选的 content_type 参数来指定类型。关于文档,似乎需要去查阅一下;在 google.appengine.ext.webapp.blobstore_handlers 包里有相关的说明。

  3. 其实没有特别好的办法可以从网上获取任意文件并存储到Blobstore里。你很可能需要在其他地方运行一个服务,比如你自己的电脑或者一个EC2实例,来获取这些文件并把它们POST到你应用里的blobstore处理程序。

撰写回答