我尝试了多种方式来签署 Cloud 存储网址 . 继续得到:
因此,不允许对预检请求的响应进行访问 - 控制 - 允许 - 原点' header is present on the requested resource. Origin ' #####' .
我应该测试多个库:
from google.cloud import storage
storage_client = storage.Client()
bucket = storage_client.get_bucket(app_identity.get_default_gcs_bucket_name())
latest_blob = None
for blob in bucket.list_blobs():
bn = blob.name
if not latest_blob or bn > latest_blob.name:
latest_blob = blob
signed_url = latest_blob.generate_signed_url(
int(time.time()) + 3600,
method='GET',
content_type="text/csv")
self.redirect(signed_url)
我认为可能需要一些 Cloud 控制台设置魔法 .
我已经通过IAM和存储桶授予服务帐户对存储的完全访问权限 . 我认为重定向可能是问题,但复制粘贴也不起作用; SignatureDoesNotMatch .
1 回答
听起来你有两个问题:
听起来您尝试在Web浏览器中使用JavaScript中的URL . 如果是这样,您需要在对象上设置CORS策略,因为默认情况下是拒绝跨源请求 . 有关详细信息,请查看https://cloud.google.com/storage/docs/cross-origin .
除此之外,当您直接输入URL并且您获得了SignatureDoesNotMatch异常时,听起来您的请求也失败了 . 我猜测问题是您正在为GET请求指定content_type . 客户端在发出请求时未指定“Content-Type”标头 . 尝试删除它 .