当前位置: 首页 > 知识库问答 >
问题:

Google云存储Ajax请求不工作

扈运浩
2023-03-14

我在谷歌云存储上有两个文件:a.wav和b.txt

我想在我的浏览器中播放a.opus,它工作正常。我想读b.txt

Google文档告诉我们,如果用户在浏览器中通过了身份验证,他就可以从bucket下载对象。

<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>

这将获得一个.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 );
});

但这给了我一个错误,控制台中打印了以下内容:

CORS策略阻止从源url在https://storage.cloud.google.com/bucketPath/b.txt访问XMLHttpRequest:请求的资源上不存在访问控制允许源标头。

此外,在网络选项卡中,我可以看到wav文件得到了响应206。

但是对于txt文件,我得到的状态为(已取消)

为什么音频元素工作,但ajax不?

共有1个答案

欧阳昊焱
2023-03-14

根据错误消息,您需要修改存储文件的存储桶的CORS配置。它需要一个“Access Control Allow Origin”头,因为当您使用jQuery发出请求时,会应用相同的源策略。您可以在这里找到有关CORS如何与云存储协同工作的更多信息。

按照以下步骤确保对您的bucket的CORS请求不会被拒绝。

 类似资料:
  • 当我从Firebase Cloud Functions(Google Cloud Functions)向Firebase Storage(Google Cloud Storage)上传文件时,我试图获得永久下载URL。 我尝试将设置为和。当我的应用程序试图下载这些文件时,这两个错误都导致了错误。这来自CreateWriteStreamOptions的文档。代码如下: 我得到这个错误: 从我的应用程

  • 在简单的我的表单,我想使用ajax与和获取和发布请求后,使用和提交表单我的页面是刷新和警报不工作的控制器验证。 控制器中的简单请求ajax无法正常工作 我的形式: 我的控制器: 我的路线:

  • 我已经为google cloud compute engine平台启用了使用导出设置,并为目标存储设置了桶。 已经快27个小时了,但报告说它不在桶里。 我读过这份文件,并遵循了完全相同的步骤。 桶的存储类重要吗?我有coldline存储类桶。

  • 谷歌云存储中的文件更改需要多长时间才能传播? 我遇到了一个非常令人沮丧的问题,我改变了一个文件的内容,并通过gsutil重新上传,但是这个改变几个小时后才显示出来。有没有办法强制一个改变的文件立即传播所有内容? 如果我查看谷歌云存储控制台中的文件,它会看到新文件,但如果我点击公共网址,它是旧版本,在某些情况下,是2个版本前的版本。 有没有我没有设置的标题? 编辑: 我尝试了,但它没有帮助,但也许旧

  • 我在我创建的谷歌云存储上有一个存储桶。我想测试一些内置ACL,如public read、public read write等。但是,一旦我使用gsutil setacl命令更改了ACL,例如:

  • 我注意到谷歌云存储没有提供任何移动SDK,所以我们可以用来与存储通信,那么我们需要创建自定义API来进行通信吗?我看到有一种方法可以在现有的Firebase项目中添加额外的桶,这会在Firebase中起作用吗?或者我们有没有一种方法可以将Firebase bucket添加到谷歌云存储中?