问题描述
在经历了很多痛苦和磨难之后,我终于能够在上传请求时从 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'
}
});
我不确定这是否重要,但我使用以下 Chrome 命令绕过本地计算机的 CORS。
chrome.exe --user-data-dir="C:/Chrome dev session" --disable-web-security
我确实尝试通过设置以下值在 Azure 门户中启用 CORS,但没有奏效。
我非常兴奋,收到了 2xx 状态代码,于是我跳到了 Azure 门户。不幸的是我的文件不在那里。我认为它可能是异步的,所以我等了 10 分钟。我发送的录音只有 5 秒长,所以我确定不会超过这个时间。
- 我检查了 Azure 中的监控图,所有数据都显示为 0。
- 我仔细检查了我的请求中的信息和共享访问签名,在我看来是正确的。
你知道这里发生了什么吗?
解决方法
你知道这里发生了什么吗?
我注意到您正在执行分块上传。本质上,您正在执行 Put Block
操作(而不是 Put Blob
操作)。 201
状态代码本质上是告诉您您上传的块(块)已成功到达存储空间。
接下来您需要做的是通过包含您上传的所有块的 ID 来调用 Put Block List
操作。这将告诉 Azure 存储将这些块拼接在一起并将它们保存为 blob。