3

我正在尝试将图像文件从 html 页面上传到 azure blob 存储。到目前为止,我已经编写了一个 Web 服务来为我的 blob 容器创建一个 SAS。由此我创建了格式为“blob 地址”/“容器名称”/“blob 名称”的 uri?“萨斯”。我的 html 页面上有一个上传控件。

然后我尝试使用以下代码上传文件:

var xhr = new XMLHttpRequest();
xhr.upload.addEventListener("progress", uploadProgress, false);
xhr.addEventListener("load", uploadComplete, false);
xhr.addEventListener("error", uploadFailed, false);
xhr.addEventListener("abort", uploadCanceled, false);
xhr.open("PUT", blobPath);
xhr.send(upFile.files[0]);

其中 blobPath 是上面的 uri,upFile 是我的 html 上传控件。

当我尝试上传文件时,会触发 uploadFailed 例程。所以:这是正确的方法吗?如何捕获上传返回的错误,以便我可以看到出了什么问题?

我的 sas 看起来像:“sr=c&si=mypolicy&sig=onZTE4buyh3JEQT3%2B4cJ6uwnWX7LUh7fYQH2wKsRuCg%3D”

任何帮助表示赞赏,谢谢。

4

2 回答 2

5

这当然是正确的方法,但是有一些事情:

  1. 您必须在请求中包含x-ms-blob-type请求标头,其值应为BlockBlob.
  2. 另请注意,要使其正常工作,您需要将 HTML 页面托管在同一存储帐户中,因为CORS目前 Azure Blob 存储不支持此功能。因此,如果您的 html 页面托管在其他域中,您会因为 CORS 而出现错误。

您可能会发现这些博客文章对于使用 SAS 和 AJAX 上传 blob 很有用:

http://coderead.wordpress.com/2012/11/21/uploading-files-directly-to-blob-storage-from-the-browser/

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

于 2013-07-29T10:43:41.663 回答
0

我现在找到了一个适用于这个问题的解决方案。我的上传现在工作如下:

  • 我将文件作为 DataURL 读入 FileReader

  • 我将返回的字符串切片并将每个切片发送到服务器,并将其存储在会话变量中

  • 发送整个文件后,我调用另一个 Web 服务将切片重新粘合在一起并将结果转换为字节数组

  • 然后将字节数组作为文件存储在 azure 的本地存储中

  • 最后,文件从本地存储传输到 blob 存储

见代码:

将文件从 html 上传到 azure

于 2013-08-06T08:38:49.650 回答