微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么 Azure Blob 存储返回 201,但不上传?

如何解决为什么 Azure Blob 存储返回 201,但不上传?

在经历了很多痛苦和磨难之后,我终于能够在上传请求时从 Azure 博客存储 API 获得 2xx 状态代码。我不知道为什么这与 AWS S3 相比如此困难。

这是我用来上传录音的代码

var blockId = btoa("Test");
$.ajax({
    url: `https://${app}.blob.core.windows.net/blob/test.mp3?comp=block&blockid=${blockId}&${sas}`,type: 'PUT',contentType: 'audio/mpeg',data: audio.audioBlob,processData: false,headers: {
        'x-ms-blob-type': 'BlockBlob','x-ms-date': new Date().toGMTString(),'x-ms-version': '2020-02-10'
    }
});

NetworkTab1

NetworkTab2

我不确定这是否重要,但我使用以下 Chrome 命令绕过本地计算机的 CORS。

chrome.exe --user-data-dir="C:/Chrome dev session" --disable-web-security

我确实尝试通过设置以下值在 Azure 门户中启用 CORS,但没有奏效。

  • 允许来源:*
  • 允许的方法:GET、PUT
  • 允许的标题:*
  • ExposedHeaders:*
  • MaxAgeInSeconds:86400

我非常兴奋,收到了 2xx 状态代码,于是我跳到了 Azure 门户。不幸的是我的文件不在那里。我认为它可能是异步的,所以我等了 10 分钟。我发送的录音只有 5 秒长,所以我确定不会超过这个时间。

  • 我检查了 Azure 中的监控图,所有数据都显示为 0。
  • 我仔细检查了我的请求中的信息和共享访问签名,在我看来是正确的。

你知道这里发生了什么吗?

解决方法

你知道这里发生了什么吗?

我注意到您正在执行分块上传。本质上,您正在执行 Put Block 操作(而不是 Put Blob 操作)。 201 状态代码本质上是告诉您您上传的块(块)已成功到达存储空间。

接下来您需要做的是通过包含您上传的所有块的 ID 来调用 Put Block List 操作。这将告诉 Azure 存储将这些块拼接在一起并将它们保存为 blob。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。