【发布时间】:2019-12-13 14:02:47
【问题描述】:
我想使用 javascript ajax 功能将图像从前端上传到谷歌存储。我需要一个服务器将生成的预签名 url,它将向我的前端提供身份验证以上传 blob。 使用本地机器时如何生成预签名 url。
以前对于 aws s3 我会这样做:
pp = s3.generate_presigned_post(
Bucket=settings.S3_BUCKET_NAME,
Key='folder1/' + file_name,
ExpiresIn=20 # seconds
)
当为用户生成签名 url 以查看存储在谷歌存储上的文件时,我会这样做:
bucket = settings.CLIENT.bucket(settings.BUCKET_NAME)
blob_name = 'folder/img1.jpg'
blob = bucket.blob(blob_name)
url = blob.generate_signed_url(
version='v4',
expiration=datetime.timedelta(minutes=1),
method='GET')
【问题讨论】:
-
您的问题是关于如何在本地生成 url?然后,您应该在运行脚本时参考authentication guide 并在本地设置 GOOGLE_APPLICATION_CREDENTIALS 环境变量。
-
不,不是本地生成。它是关于我的服务器如何生成一个 url,前端用户可以使用该 url 直接从浏览器将文件上传到存储。
-
那么您只需将代码 sn-p 的方法从 GET 更改为 PUT 或 POST。该功能的文档令人困惑,因此还要注意这一点:1.您需要instantiate the client from a credentials json,2.凭据应使用有权在目标存储桶中创建对象的服务帐户,3.您需要configure CORS with
gsutil允许前端调用——如果出现问题,尝试将responseHeaders设置为'*' -
是否有特定的字典/Json 格式用于将帖子数据发送到 GCP 存储?你有一个工作 Ajax 最好是 Axios 前端示例吗?例如:{键:'',数据:''}
-
应该像axios.put(presignedUrl, file)一样简单
标签: python google-cloud-platform google-cloud-storage