首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ferris2-框架、python、google应用引擎、云存储--上传图片并将其公开?

Ferris2-框架、python、google应用引擎、云存储--上传图片并将其公开?
EN

Stack Overflow用户
提问于 2015-10-04 23:28:37
回答 2查看 146关注 0票数 0

因此,google ferris2框架似乎只对上传组件使用blobstore api,这让我怀疑是否有可能将上传到云存储中的图像公开,而不必编写自己的上载方法,完全放弃使用上载组件,这似乎也会在使用云存储客户端库(python)时产生兼容性问题。

背景/上下文

  1. 使用-,python,云存储客户端库

需求blob 0.5我们要求blob信息或文件存储在模型中。我们希望在模型上有一个公共云服务url,仅此而已。这似乎阻止了我们使用普通的ferris方法上传到云存储。

的事情我已经知道/路障的一个大的障碍是处理使用cgi / blobstore用于表单上的字段存储。这似乎会造成问题,因为到目前为止,它还不允许通过google云存储python客户端将数据发送到云存储。

关于谷歌云存储python客户端和cgi的信息:为了从我们的服务器向云存储写入数据,需要用cloudstorage.open("/bucket/object“、"w”、.)调用云存储(一种云存储库方法)。但是,到目前为止,数据应用到模型之前,从wtforms.fields.FileField()的post返回一个wtforms.fields.FileField(如简单的“打印图像”语句所示),在应用到模型之后,它是一个blob存储实例。

I想要对此进行验证:在进行了大量的研究和测试之后,似乎由于仅限于用于上传组件的blobstore api,因此使用blob存储api和blob键来处理上传似乎基本上是不可避免的,而不必为云存储调用创建第二个上传函数。Blob实例似乎与云存储客户端库不兼容,而且似乎除了从blob文件中获取元数据(实际上不调用云存储以获取原始文件)之外,没有其他方法。但是,这似乎不需要在服务器上存储额外的数据。此外,我认为,通过设置整个桶具有读取权限,可以绕过公共链接问题。

澄清问题: 1.为了通过我们的应用程序(任何用户,而不是经过身份验证的用户)向公众提供上传的图像,我是否需要使用cloudstorage库,或者是否有一种方法可以使用blobstore?

  1. 是否有一种方法可以从blob键(使用action方法进行保存)获取原始文件,而不必首先调用云存储,以便可以使用该库上传文件?
  2. 如果没有,是否有方法从cgi.FieldStorage抓取文件,然后用python客户端库发送到云存储?似乎使用cgi.FieldStorage.value只是元数据而不是文件,与cgi.FieldStorage.file.read()相同
EN

回答 2

Stack Overflow用户

发布于 2015-10-05 11:25:53

1)不能使用GAE GCS客户端更新ACL。

2)在blobstore上传到GCS后,可以使用GCS,并更改ACL以使其公开。你不用再上传了。请参阅插入acl的此示例代码

3)或使用cgi.Fieldstorage读取数据(< 32 Mb),并使用GCS客户端将其写入GCS。

代码语言:javascript
复制
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的表单后上传和策略文档来控制上传。

而且,您可以始终使用公共下载处理程序,它从from商店或GCS读取文件。

票数 0
EN

Stack Overflow用户

发布于 2016-05-23 15:50:17

现在,您可以在将文件从App上传到Cloud时指定ACL。不知道它已经存在多久了,只是想分享一下:

代码语言:javascript
复制
    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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32939446

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档