【发布时间】:2015-10-04 23:28:37
【问题描述】:
所以 google ferris2 框架似乎只使用 blobstore api 用于 Upload 组件,这让我质疑是否可以将图像上传到云存储公开而无需编写自己的上传方法并放弃使用 Upload 组件总的来说,这似乎在使用云存储客户端库(python)时也会产生兼容性问题。
背景故事/背景
- 使用-谷歌应用引擎、python、云存储客户端库
要求 0.5 我们要求将blob信息和文件存储在模型中。我们想要一个模型上的公共云服务 url,仅此而已。这似乎阻止了我们使用正常的 ferris 方法上传到云存储。
我已经知道的事情/路障 最大的障碍之一是使用 cgi / blobstore api 在表单上进行字段存储来处理 Ferris。这似乎会引起问题,因为到目前为止它还不允许通过谷歌云存储 python 客户端将数据发送到云存储。
我们对谷歌云存储python客户端和cgi的了解: 要将数据从我们的服务器写入云存储,需要使用 cloudstorage.open("/bucket/object", "w", ...) 调用云存储(云存储库方法)。但是,到目前为止,在将数据应用于模型之前,在应用数据之后,似乎从 wtforms.fields.FileField() 的帖子中返回了 cgi.FieldStorage(如简单的“打印图像”语句所示)对于模型来说,它是一个 blob 存储实例。
我想对此进行验证: 经过大量研究和测试,似乎由于ferris仅限于上传组件的blobstore api,因此使用blob store api和blob键来处理上传似乎基本上是不可避免的,而无需为云创建第二个上传功能存储调用。 Blob 实例似乎与该云存储客户端库不兼容,并且似乎除了从 Blob 文件中获取元数据之外没有其他方法(实际上没有调用云存储来获取原始文件)。但是,这似乎不需要在服务器上存储额外的数据。此外,我相信可以通过将整个存储桶设置为具有读取权限来解决公共链接问题。
澄清问题: 1. 要通过我们的应用程序向公众提供上传的图像(任何用户,而不是经过身份验证的用户),我是否必须使用 cloudstorage python 客户端库,或者有没有办法使用 blobstore api 做到这一点?
有没有一种方法可以从 blob 键(使用添加操作方法保存时)获取原始文件,而无需先调用云存储,以便可以使用该库上传文件?
如果没有,有没有办法从 cgi.FieldStorage 中抓取文件,然后使用 python 客户端库发送到云存储?似乎使用 cgi.FieldStorage.value 只是元数据而不是文件,与 cgi.FieldStorage.file.read() 相同
【问题讨论】:
标签: python google-app-engine google-cloud-storage