因此,google ferris2框架似乎专门为上传组件使用blobstore api,这让我怀疑是否有可能在不必编写自己的上传方法和完全放弃使用上传组件的情况下将上传到云存储的图像公开,这似乎也会在使用云存储客户端库(python)时产生兼容性问题。
背景/背景
要求0.5我们要求在模型中存储blob信息或文件。我们希望在模型上有一个公共云服务url,仅此而已。这似乎阻止了我们使用正常的ferris方法上传到云存储。
我已经知道的事情/障碍其中一个大障碍是使用cgi/blobstore api在表单上进行现场存储来处理Ferris。这似乎会造成问题,因为到目前为止,它还不允许通过google云存储python客户端将数据发送到云存储。
我们对google云存储python客户端和cgi的了解:要从服务器向云存储写入数据,需要使用cloudstorage调用云存储。打开(“/桶/对象”,“w”,…),(云存储库方法)。然而,到目前为止,似乎cgi。FieldStorage从wtforms的post返回。字段。FileField()(如简单的“print image”语句所示)在将数据应用于模型之前,在将其应用于模型之后,它是一个blob存储实例。
我想验证一下:经过大量的研究和测试,似乎由于ferris仅限于上传组件的blob store api,因此使用blob store api和blob键来处理上传似乎基本上是不可避免的,而无需为云存储调用创建第二个上传函数。Blob实例似乎与该云存储客户端库不兼容,并且似乎没有办法从blob文件中获取除元数据之外的任何内容(而无需实际调用云存储以获取原始文件)。但是,这似乎不需要在服务器上存储额外的数据。此外,我相信可以通过将整个存储桶设置为具有读取权限来绕过公共链接问题。
澄清问题:1。要通过我们的应用程序(任何用户,而不是经过身份验证的用户)向公众提供上载的图像,我必须使用cloudstorage python客户端库,还是有办法通过blobstore api做到这一点?
有没有一种方法可以从blob键(使用add action方法保存时)获取原始文件,而不必首先调用云存储,这样就可以使用该库上载文件?
如果没有,有没有办法从cgi中抓取文件。FieldStorage,然后用python客户端库发送到云存储?似乎使用cgi。FieldStorage.value只是元数据而不是文件,cgi也是如此。FieldStorage.file.read()
现在,您可以在将文件从App Engine上载到云存储时指定ACL。不知道它已经存在多久了,只是想分享一下:
filename = '/' + bucket_name + '/Leads_' + newUNID() + '.csv'
write_retry_params = gcs.RetryParams(backoff_factor=1.1)
gcs_file = gcs.open(filename,
'w',
content_type='text/csv',
options={'x-goog-acl': 'public-read'},
retry_params=write_retry_params)
文档:https://cloud.google.com/storage/docs/xml-api/reference-headers#standard
1) 您不能使用GAE GCS客户端更新ACL。
2)您可以在blostore上传到GCS后使用GCS json API并更改ACL以使其公开。您不必再次上传。请参阅此插入acl的示例代码。
3) 或使用cgi。读取数据的Fieldstorage(
import cloudstorage as gcs
import mimetypes
class UploadHandler(webapp2.RequestHandler):
def post(self):
file_data = self.request.get("file", default_value=None)
filename = self.request.POST["file"].filename
content_type = mimetypes.guess_type(self.filename)[0]
with gcs.open(filename, 'w', content_type=content_type or b'binary/octet-stream',
options={b'x-goog-acl': b'public-read'}) as f:
f.write(file_data)
第三种方法:使用带有GCS签名url和策略文档的表单post上载来控制上载。
您可以始终使用公共下载处理程序,该处理程序从blobstore或GCS读取文件。
我正在看新的谷歌云数据存储,看起来很棒。但有件事我不明白。。。它应该替代谷歌应用引擎数据存储吗?我如何在GAE内部使用它?它们之间有什么区别? 我在Java有一个GAE应用程序,它使用3个实体,每个实体都有数千行,我需要经常做连接...
null
Google API客户端库 Google云存储客户端库 Google云存储API Google Cloud Storage JSON API Java客户端库 我仍然不知道每一个都是做什么的,我不知道如何在我的android客户端中实现云存储。 如果我使用云存储,为什么我需要应用引擎后端应用?我的后端不需要API,对吗?我可以使用Google Cloud Storage JSON API直接消耗
是否有与getPublicUrl PHP方法等效的python? 我正在使用Google Cloud Client Library for Python存储一些文件,我正在试图找到一种通过编程获得我存储的文件的公共URL的方法。
我应该做什么才能成功上传图片?任何帮助都将不胜感激。 非常感谢。