azure - 使用 JavaScript 将文件放入 Blob 存储会导致 403(服务器无法验证请求)

标签 azure azure-blob-storage azure-media-services

我遵循了 Gaurav Mantri 的这篇精彩文章,以便使用 HTML5/Javascript 将文件直接上传到 Blob 存储中。

http://gauravmantri.com/2013/02/16/uploading-large-files-in-windows-azure-blob-storage-using-shared-access-signature-html-and-javascript/

但是我发现在上传部分期间,这部分代码失败并出现 403 错误。

有趣的是,这种情况是随机发生的。有时上传确实有效并且一切都成功完成,但大多数时候上传失败并出现 403 错误。

需要注意的一件事:我希望 Azure 很快就会添加 CORS 支持,但目前我使用的是 Chrome(使用 chrome.exe --disable-web-security 选项)来解决这个问题。

PUT https://mystorage.blob.core.windows.net/asset-38569007-3316-4350…Giv17ye4bocVWDbA/EQ+riNiG3wEGrFucbd1BKI9E=&comp=block&blockid=YmxvY2stMA==

403 (Server failed to authenticate the request. Make sure the value of Authorization header is formed correctly including the signature.)

$.ajax({
    url: uri,
    type: "PUT",
    data: requestData,
    processData: false,
    beforeSend: function(xhr) {
        xhr.setRequestHeader('x-ms-blob-type', 'BlockBlob');
        xhr.setRequestHeader('Content-Length', requestData.length);
    },
    success: function (data, status) {
        console.log(data);
        console.log(status);
        bytesUploaded += requestData.length;
        var percentComplete = ((parseFloat(bytesUploaded) / parseFloat(selectedFile.size)) * 100).toFixed(2);
        $("#fileUploadProgress").text(percentComplete + " %");
        uploadFileInBlocks();
    },
    error: function(xhr, desc, err) {
        console.log(desc);
        console.log(err);
    }
});

在 Azure 中创建 Assets /定位器/文件之后,在实际开始上传部分之前,我设置了 30 秒的延迟,以便为定位器的传播提供时间。

对我可能缺少的内容有什么建议吗?

最佳答案

非常感谢 Gaurav 为我指明了问题的方向。

事实证明,我正在对服务器进行 JSON 调用,该服务器将创建 Assets /定位器/策略,然后返回上传 uri。

但是我的上传 uri 类型为 Uri,当 JSON 序列化它时,它没有正确编码。

将我的 uri 对象(在服务器上)更改为 string (并调用 uploaduri = (new UriBuilder(theuri)).ToString(); )后返回到 Web 客户端的数据已正确编码,我不再收到 403 错误。

因此,请注意,如果您遇到同样的问题,您可能需要查看上传 uri 的编码。

关于azure - 使用 JavaScript 将文件放入 Blob 存储会导致 403(服务器无法验证请求),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17432291/

相关文章:

azure - 无法使用 BlobContainerAsyncClient 列出 blob

c# - ListBlob 在 cloudblobdirectory 类中不可用?

azure - 您可以在 Azure blob 上手动设置 etag 和最后修改时间吗?

azure - 检索 Microsoft Azure 应用服务存储的配额

c# - 如何制作连续的WebJob?

rest - Azure Media Player - 在编码过程中显示编码进度或某种消息

php - 自动在 Azure 上移动上传的文件

azure - JWT token 验证正确,但 Azure 媒体 AES 失败,并出现 AuthorizationPolicyEvaluationFailure 错误

powershell - 八达通中的"The Azure PowerShell session has not been properly initialized"错误消息

t-sql - 如何解锁 Azure Sql 登录