将图像文件从js上传到azure blob存储

时间:2013-07-29 09:06:52

标签: javascript image file-upload azure azure-storage-blobs

我正在尝试将图片文件从html页面上传到azure blob存储。到目前为止,我已经编写了一个Web服务来为我的blob容器创建一个SAS。从这里我创建了一个格式为“blob地址”/“容器名称”/“blob名称”的uri? “SAS”。我的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”

感谢任何帮助,谢谢。

2 个答案:

答案 0 :(得分:5)

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

  1. 您必须在请求中加入x-ms-blob-type请求标头,其值应为BlockBlob
  2. 另请注意,要实现此目的,您需要在同一存储帐户中托管HTML页面,因为截至今天,Azure Blob存储中不支持CORS。因此,如果您的html页面托管在其他某个域中,则会因CORS而出错。
  3. 您可能会发现这些博客文章对于使用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/

答案 1 :(得分:0)

我现在找到了适用于此问题的解决方案。我上传的内容如下:

  • 我将文件作为DataURL读入FileReader

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

  • 一旦发送完整个文件,我就打电话给另一个网络服务 将切片粘合在一起并将结果转换为字节数组

  • 然后将字节数组存储为azure

  • 中的本地存储中的文件
  • 最后,文件从本地存储转移到blob存储

请参阅以下代码:

Upload files from html to azure