流的工作方式就像存储到BlobStore一样。客户端请求上载URL,BlobStore.create_upload_url(...)创建它,客户端通过多部分POST上载文件,然后服务器重定向到我的GAE应用程序中的上载处理程序。
问题是,虽然我必须选择GCS bucket(它是create_upload_url调用的参数之一),但我不知道如何选择文件名。我想把它分解成文件夹。灵感来自
Google App Engine Blobstore到Google Cloud Storage迁移工具,其中文件名被破坏,以便可以管理GCS“文件夹”的浏览。
我只知道一种命名GCS文件的方法--放弃blobstore API。相反,客户机将把文件上传到GAE处理程序,该处理程序将使用lib.cloudstorage将文件数据写入GCS--与引用的迁移工具所做的完全一样。
我会失去GCS的好东西,比如在上传过程中对错误进行重试。
问题是:有没有一种方法可以将文件直接上传到GCS,同时影响最终的GCS对象的命名方式。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>'gcs_upload'</title>
</head>
<body>
<form action="http://storage.googleapis.com/{{ form_bucket }}"
method="post" enctype="multipart/form-data">
<input type="text" name="key" value="">
<input type="hidden" name="GoogleAccessId" value="{{ form_access_id }}">
<input type="hidden" name="acl" value="bucket-owner-read">
<input type="hidden" name="success_action_redirect" value="{{ form_succes_redirect }}">
<input type="hidden" name="policy" value="{{ form_policy }}">
<input type="hidden" name="signature" value="{{ form_signature }}">
<input type="file" name="file">
<input type="submit" value="Upload">
</form>
</body>
</html>
class GcsUpload(BaseHandler):
def get(self):
default_bucket = app_identity.get_default_gcs_bucket_name()
google_access_id = app_identity.get_service_account_name()
succes_redirect = 'http://www.example.com/success'
policy_string = """
{"expiration": "2015-06-22T18:11:11Z",
"conditions": [
["starts-with", "$key", ""],
{"acl": "bucket-owner-read"},
{"success_action_redirect": "%s"},
]}""" % succes_redirect
policy = base64.b64encode(policy_string)
_, signature_bytes = app_identity.sign_blob(policy)
signature = base64.b64encode(signature_bytes)
self.render_template('gcs_upload.html', form_bucket=default_bucket, form_succes_redirect=succes_redirect,
form_access_id=google_access_id, form_signature=signature, form_policy=policy)
我正试图用BlobStore上传到GCS。我在生成上传url时设置了GCS bucket名称,并且文件成功上传。 在上传处理程序中,返回正确的文件名。但是文件实际上以不同的文件名保存在GCS bucket中。每次,文件名都是随机散列,如下所示: 它会是这样工作的吗?这是异常吗? 我根据返回的数据将文件名存储到datastore,这是文件名的正确值。但是我无法使用访问该文件,因为该文件以随机散列作为
我在本地开发服务器上运行代码,但使用在项目上配置的GCS默认桶名。 Python 2.7版
我使用以下链接使用谷歌云存储: 谷歌云 我想上传一个对象,使用上面的API中给出的插入函数。我使用的代码如下: 但我得到的错误如下: 致命错误:未捕获的异常“Google_ServiceException”,消息为“调用POST时出错”https://www.googleapis.com/storage/v1beta1/b/mybucket/o: (400)第66行的/home/www/publi
Firebase Admin SDK文档清楚地说明,服务帐户对存储帐户具有完全的范围控制,但由于传输令牌源为nil,因此正确引导凭据似乎有些错误。