1

我正在尝试通过PUT方法将文件上传到我自己的存储桶,但无法正常工作:

function upload(url, data) {
    var pd = new XMLHttpRequest();
    pd['open']('PUT', "http://storage.googleapis.com/" + url, true);
    pd['setRequestHeader']('Content-type', 'text/html');
    pd['setRequestHeader']('x-goog-acl', 'public-read');
    pd['setRequestHeader']('Authorization', 'Bearer *********F0aIu4NbTd6A');
    pd['setRequestHeader']('Content-length', data['length']);
    pd['setRequestHeader']('Connection', 'close');
    pd['send'](data);
}
upload('bucked/index.html','<b>hello</b>');
4

3 回答 3

2

该错误似乎表明没有为您的存储桶设置CORS 。

于 2012-10-03T01:30:21.543 回答
2

我有类似的问题:

request.setRequestHeader('x-goog-acl', 'public-read');
request.setRequestHeader('Authorization', 'Bearer ' + access_token);
request.setRequestHeader("X-File-Name", file.name);
request.setRequestHeader("X-File-Size", file.size);.
  1. 设置正确的原点
  2. 添加响应头(与您的请求相同)[“授权”,“内容类型”,“x-file-name”,“x-file-size”,“x-goog-acl”]
  3. PUT 和 OPTIONS 方法我在这个文档上找到了解决方案

示例 cors.json

[
    {
        "origin": ["*", "http://localhost:8080", "https://localhost:8080"],
        "responseHeader": ["authorization", "content-type", "x-file-name", "x-file-size", "x-goog-acl"],
        "method": ["GET", "HEAD", "DELETE", "PUT", "OPTIONS"],
        "maxAgeSeconds": 3600
    }
]

要设置此配置,请使用 gsutil cors set cors.json gs://your_bucket

PS。Connection 和 Content-lenght 不是必需的,JS 会向控制台抛出一些错误。

于 2016-04-04T13:47:38.383 回答
0

如果您能告诉我们 PUT 操作是如何失败的,那将会更有帮助。您是否尝试过上传到 commondatastorage.googleapis.com 而不是 storage.googleapis.com?

于 2012-10-02T19:22:58.897 回答