Google Cloud Storage Ajax请求不起作用

时间:2019-04-11 14:06:00

标签: javascript ajax google-cloud-platform cors google-cloud-storage

我在Google云存储上有2个文件:a.wav和b.txt

我想在我的浏览器中播放a.opus,效果很好。 我想阅读b.txt

Google Docs告诉用户,如果用户在浏览器中通过了身份验证,则可以从存储桶中下载对象。

<audio
    controls
    src="https://storage.cloud.google.com/bucketPath/a.wav" type="audio/ogg; codecs=opus">
        Your browser does not support the
        <code>audio</code> element.
</audio>

这将获得a.wav并播放。没问题。

现在要读取b.txt,我正在使用jquery ajax

$.ajax({
    url: "https://storage.cloud.google.com/bucketPath/b.txt",
    type: "GET",
    xhrFields: {
        withCredentials: true
    },
    crossDomain: true
}).done(function (data) {
    console.log( data );
}).fail(function( jqXHR, textStatus, errorThrown ) {
    alert( "Request failed: " + textStatus + " , " + errorThrown );
});

但这给了我错误,控制台中显示了以下内容:

  

在以下位置访问XMLHttpRequest   'https://storage.cloud.google.com/bucketPath/b.txt'   来自来源“ url”的信息已被CORS政策阻止:否   请求中存在“ Access-Control-Allow-Origin”标头   资源。

此外,在[网络]标签中,我可以看到wav文件得到了响应206。

但是对于txt文件,我的状态为(canceled)

为什么Audio元素起作用而ajax不能起作用?

1 个答案:

答案 0 :(得分:0)

根据错误消息,您需要修改存储文件的存储桶的CORS配置。它需要一个'Access-Control-Allow-Origin' header,因为使用jQuery进行请求时会应用同源策略。您可以找到有关CORS如何与Cloud Storage here一起工作的更多信息。

按照these steps进行操作,以确保对存储桶的CORS请求不会被拒绝。