我正在尝试将图片文件从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”
感谢任何帮助,谢谢。
答案 0 :(得分:5)
这当然是正确的方法,但有一些事情:
x-ms-blob-type
请求标头,其值应为BlockBlob
。CORS
。因此,如果您的html页面托管在其他某个域中,则会因CORS而出错。您可能会发现这些博客文章对于使用SAS和AJAX上传blob非常有用:
http://coderead.wordpress.com/2012/11/21/uploading-files-directly-to-blob-storage-from-the-browser/
答案 1 :(得分:0)
我现在找到了适用于此问题的解决方案。我上传的内容如下:
我将文件作为DataURL读入FileReader
我将返回的字符串切片并将每个切片发送到服务器 它存储在会话变量
一旦发送完整个文件,我就打电话给另一个网络服务 将切片粘合在一起并将结果转换为字节数组
然后将字节数组存储为azure
最后,文件从本地存储转移到blob存储
请参阅以下代码: