【问题标题】:Getting 403 error when uploading large file to blob将大文件上传到 blob 时出现 403 错误
【发布时间】:2021-11-08 01:12:47
【问题描述】:

我按照此示例将文件上传到 azure blob 存储。 https://dmrelease.blob.core.windows.net/azurestoragejssample/samples/sample-blob.html

    var blobService = AzureStorage.Blob.createBlobServiceWithSas(url, sasKey);
    var customBlockSize = file.size > 1024 * 1024 * 32 ? 1024 * 1024 * 4 : 1024 * 512;
    blobService.singleBlobPutThresholdInBytes = customBlockSize;

    var finishedOrError = false;
    const options = {
        blockSize: customBlockSize
    };
    var speedSummary = blobService.createBlockBlobFromBrowserFile(container, buildBlobName(file), file, options, function (error, result, response) {
        console.log("speedSummary")
        finishedOrError = true;
        if (error) {
            alert('Error');
        } else {
            displayProcess(100);
        }
    });

当我尝试上传小文件 (512kb),我开始在每个 refreshProgress 中收到错误。这是错误。

PUT https://?????.blob.core.windows.net/images/210815%20bltn_c94e6d0b3f30a.pdf?comp=block&blockid=MWU4YTRjZDktMDAwMDAx&sv=2019-12-12&se=2021-09-12T13%3A06%3A18Z&sr=c&sp=c&sig=QdS%2BjhcLQ4WJXHDjShZSny5F1%2FhSZbl%2Fj6Oq%2B1DMzMA%3D&api-version=2018-03-28x 403 (This request is not authorized to perform this operation using this permission.)
PUT https://?????.blob.core.windows.net/images/210815%20bltn_c94e6d0b3f30a.pdf?comp=block&blockid=MWU4YTRjZDktMDAwMDAx&sv=2019-12-12&se=2021-09-12T13%3A06%3A18Z&sr=c&sp=c&sig=QdS%2BjhcLQ4WJXHDjShZSny5F1%2FhSZbl%2Fj6Oq%2B1DMzMA%3D&api-version=2018-03-28x 403 (This request is not authorized to perform this operation using this permission.)

分段上传似乎失败了。准确地说,当我上传大小为 600kb 的文件时,我有两个错误,链接完全相同。每个多部分下载的链接是否应该完全相同? 还是容器中的设置错误? 我在网上看了几个例子。实现方式大致相同。

知道有什么问题吗?谢谢

【问题讨论】:

    标签: azure azure-functions azure-blob-storage azure-functions-core-tools


    【解决方案1】:

    问题在于您的共享访问签名 (SAS) 令牌中的权限。

    目前您的 SAS 令牌只有 create 权限 (sp=c),它只允许您执行 Put Blob 操作(这就是当您的 blob 大小小于 512KB 时您的请求成功的原因,因为 blob 没有分成块)。

    当 blob 大小超过 512KB 时,通过将 blob 拆分为多个块(块)来上传 blob。在后台执行Put Block REST API 操作。对于 Put Block 操作,您的 SAS 令牌需要 write 权限 (sp=w)。添加此权限后,您应该不会收到此错误。

    事实上,在这两种情况下(Put Blob 和 Put Block)只使用 write 权限就足够了。

    更多详情请看此链接:https://docs.microsoft.com/en-us/rest/api/storageservices/create-service-sas#permissions-for-a-directory-container-or-blob。

    【讨论】:

    • 太棒了。有用。非常感谢。
    猜你喜欢
    • 2011-05-24
    • 1970-01-01
    • 1970-01-01
    • 2017-02-11
    • 1970-01-01
    • 1970-01-01
    • 2014-08-08
    • 2016-04-14
    • 2016-05-17
    相关资源
    最近更新 更多