尝试通过 javascript 上传到已签名的 url 时出现权限问题

Permissions issue when trying to upload to a signed url via javascript

我们有一个服务器,可以为各种尺寸的图像生成签名 URL,并将它们交给客户端。 Web 客户端确实 javascript 天哪尝试将三个不同大小的相同图像上传到服务器提供的签名 URL。

<Error>
  <Code>AccessDenied</Code>
  <Message>Access denied.</Message>
  <Details>Anonymous users does not have storage.objects.create access to bucket your-bucket-name.</Details>
</Error>

我们已经确认服务器代码可以成功上传图片,我们可以通过gsutil以相同的权限上传。

这是我们非常尖锐的 JS 代码的一个片段,它试图将图像发送到 GCS。

  var blobData = dataURItoBlob(canvas.toDataURL('image/png'));

  jQuery.ajax({
    type: 'PUT',
    url: signedURL,
    contentType: 'image/png',
    processData: false,
    data: blobData
  })

希望有人能指出正确的方向!

响应是 401 还是 403?如果是 401,则查询参数可能由于某种原因不存在。这通常是因为您的程序可能不小心对 URL 进行了两次转义或以其他方式剥离了查询参数。检查 signedURL.

的值