【问题标题】:azure file upload from client side从客户端上传天蓝色文件
【发布时间】:2016-01-18 17:07:05
【问题描述】:
reader.onloadend = function (evt) {
        if (evt.target.readyState == FileReader.DONE) { // DONE == 2

            submitUri = "https://mediasvclb3ql3sjdqfh8.blob.core.windows.net/asset-4205a03a-0d00-80c4-6d1d-f1e5bd379a7f/sample.mp4?sv=2012-02-12&sr=c&si=180e3bdd-0856-4001-85b5-9aa455505ca3&sig=y0PFiMampL7sscrdcxcm4itTHNNeXhVc0JJGxFNiVuc%3D&st=2016-01-17T18%3A05%3A20Z&se=2115-12-24T18%3A05%3A20Z";
            // var uri = submitUri;
            var uri = submitUri; //+ '&comp=block&blockid=' + blockIds[blockIds.length - 1];
            var requestData = new Uint8Array(evt.target.result);

            $.ajax({
                url: uri,
                type: "PUT",
                data: requestData,
                processData: false,
                beforeSend: function(xhr) {

                    xhr.setRequestHeader('content-type',    'application/octet-stream');
                    xhr.setRequestHeader('x-ms-version',    '2014-02-14');
                    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);
                }
            });
        }
    };

这是我从样本 here 制作的

我还为此帐户启用了 CORS

你可以运行代码http://megamedia.cloudapp.net/uploader.html

我做错了什么?为什么我的文件没有上传?

【问题讨论】:

  • 您收到Resource Not Found (404) 错误。您能否检查一下您的存储帐户中是否存在 blob 容器 (asset-4205a03a-0d00-80c4-6d1d-f1e5bd379a7f)?
  • 我使用这个链接上传

标签: javascript azure cors media azure-media-services


【解决方案1】:

我已经从我这边重现了这个问题。事实证明,您没有为 SAS 令牌指定足够的权限。对于上传操作,您需要在您的 SAS 令牌中指定“sp=rw”权限。 详情请查看这篇文章:https://azure.microsoft.com/en-us/documentation/articles/storage-dotnet-shared-access-signature-part-1/

以下是我的测试,仅供参考:

场景 1:在没有写权限的情况下生成 SAS 令牌。

https://.blob.core.windows.net/test1/sample.mp4?sv=2014-02-14&sr=c&sig=XnmDhSnec43Mm06tXtRoqJu8r3CPFXYbzE5%2FJW9c27Q%3D&st=2016-01-18T16%3A00%3A00Z&se=2016- 01-26T16%3A00%3A00Z&sp=r

我得到了和你一样的 404 结果:

场景 2:生成具有写入权限的 SAS 令牌。

https://.blob.core.windows.net/test1/sample.mp4?sv=2014-02-14&sr=c&sig=vOYJfGN%2F0TJrgoIoiYqLWm%2FF7A4dkhrDyUChQlVbUN0%3D&st=2016-01-18T16%3A00%3A00Z&se= 2016-01-26T16%3A00%3A00Z&sp=rw

请注意 SAS 令牌中指定的参数“sp”,sp=r 表示您对该令牌只有读取权限,sp =rw 表示读写权限。希望对您有所帮助。

编辑:
只需分享工具Azure Storage Explorer 6即可轻松生成SAS令牌。

【讨论】:

  • 我使用 Azure Storage Explorer 6 生成了这个字符串mediasvclb3ql3sjdqfh8.blob.core.windows.net/…
  • 但是这个网址还是有同样的问题
  • @Anri 我刚刚尝试将文件上传到您提供的新 SAS url,它可以正常工作,您可以从您身边验证它(您可以在“blobhobeto”中看到一些名为 stars.jpg 的文件容器)。所以新的 URL 对我来说似乎是正确的。你提到这个网址仍然有同样的问题,你的意思是从你这边上传到这个网址时仍然出现404错误?我注意到您共享的代码与原始示例略有不同,但即使我将代码修改为您的代码,它仍然可以正常工作。
  • 将文件直接从客户端上传到 azure 是否被认为是一种好习惯,还是先将其放到我的服务器中更安全?
猜你喜欢
  • 2015-11-25
  • 1970-01-01
  • 2020-08-29
  • 2017-08-21
  • 2021-03-19
  • 2019-07-07
  • 2012-02-03
  • 2023-04-09
  • 1970-01-01
相关资源
最近更新 更多