【问题标题】:GSUTIL Signed Url PUT to Google Cloud Storage failsGSUTIL Signed Url PUT 到 Google Cloud Storage 失败
【发布时间】:2014-10-17 20:25:14
【问题描述】:

我希望网站的用户能够在不使用 Web 应用服务器资源的情况下将文件上传到 google cloud storage,因此签名 URL 似乎是可行的方法。

当用户选择要上传的文件时,jquery 会向django 发送一个GET 请求以获取签名的网址。 url 是使用gsutil signurl 命令生成的。 Django 然后将签名的 url 返回到模板,并在提交时使用签名的 url 发送 jquery PUT 请求。

但是:

  • PUT 请求失败并显示“SignatureDoesNotMatch”。
  • 使用此方法对存储对象的 GET 请求可以正常工作。

是否有必须与 PUT 请求一起发送的标头?

gsutil 命令(假设用户选择了文件“map.html”)...

gsutil signurl -p notasecret -m PUT -d 10m /path/to/.p12 gs://bucket_name/map.html

jquery PUT 代码...

    $.ajax( {
  url: g_url,
  type: 'PUT',
  crossDomain: true,
  success: console.log('success'),
  error: function(XMLHttpRequest, textStatus, errorThrown){
    alert('status:' + XMLHttpRequest.status + ', status text: ' + XMLHttpRequest.statusText);
},
  data: file,
} );

g_url 看起来像...

https://storage.googleapis.com/bucket_name/map.html?GoogleAccessId=__retracted__&Expires=1408889274&Signature=rDJAZQG4MIyMupy0M8HJ17r8rkEJcAbYSWpcq084SdzRh%2BnZavTfuWl4Q%2F6ytkSkN2c2%2B4b4pPRF5eWOEOL1InRxlB5pEBedPFZPpgDrRvR9tFybtH%2BkesKLhIZ3WjJ0utzAwhl%2BgAlQY6ulvO0Djib20zcG5fkHOigpRf1xBUk%3D

【问题讨论】:

  • 我有一个理论,但我们必须进行调查才能确定。 GCS XML API 作为其失败结果的一部分返回它希望您签名的字符串。该字符串不能与您正在执行的上传匹配。您收到的确切错误消息是什么?
  • 非常有趣...要签名的字符串是 GET 1408979265 /tell/map.html 。显然我的 gsutil 命令没有生成 PUT 请求字符串。
  • 相反。要签名的字符串是与正在发出的请求相对应的字符串,而不是与签名相对应的字符串。我猜出于某种原因,您的 AJAX 调用是“GET”。你能检查一下吗?

标签: jquery django google-cloud-storage gsutil


【解决方案1】:

原来我的问题与 CORS 有关。为了让它在 Django 1.6 上工作,我必须执行以下操作:

PUTDELETE 请求开始工作。我遇到的唯一其他问题是不兼容的内容标题。所以你我需要在签名的 url 中和发送请求之前设置你的内容类型。

gsutil 命令看起来像

gsutil signurl -p notasecret -m PUT -d 10m -c 'multipart/formdata; charset=UTF-8' /path/to/.p12 gs://bucket_name/map.html

在 jquery 请求中添加 beforeSend

beforeSend: function (request){
request.setRequestHeader("Content-Type", 'multipart/formdata; charset=UTF-8')
;},

【讨论】:

    猜你喜欢
    • 2021-04-25
    • 2014-06-09
    • 1970-01-01
    • 2016-03-13
    • 2020-03-24
    • 1970-01-01
    • 2014-09-21
    • 2019-03-31
    • 2021-03-02
    相关资源
    最近更新 更多