从js上传一个图像文件到azure blob存储
Upload an image file to azure blob storage from js
我正试图将一个图像文件从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%2B4cJ6uwnW7LUh7fYQH2wKsRuCg%3D"
感谢任何帮助,谢谢。
这当然是正确的方法,但也有一些事情:
- 您必须在请求中包含
x-ms-blob-type
请求标头,其值应为BlockBlob
- 此外,请注意,为了实现这一点,您需要将HTML页面托管在同一存储帐户中,因为截至目前,Azure Blob存储中不支持
CORS
。所以,如果你的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/
我现在找到了一个能解决这个问题的解决方案。我的上传现在工作如下:
-
我将文件作为DataURL读取到FileReader 中
-
我对返回的字符串进行切片,并将每个切片发送到服务器存储在会话变量中
-
一旦整个文件被发送出去,我就会调用另一个网络服务将切片重新粘合在一起,并将结果转换为字节数组
-
字节数组然后作为文件存储在azure 的本地存储器中
-
最后,文件从本地存储转移到blob存储
参见代码:
将文件从html上传到azure
- 如何使用谷歌应用程序脚本从电子邮件中提取内联文件/图像
- 当我在操作属性中写入页面名称时,文件图像不会上传
- 将已编辑的文件(图像)数组发送到php脚本
- 预览上传的文件(图像)
- 使用 src 在 PHP 中链接文件(图像,js)
- 通过javascript处理默认配置文件图像的更好方法
- 使我的想法成为可能,为画布输入文件图像命名
- 跨原点图像加载(twitter配置文件图像)
- 输入文件(图像)显示空数组,如果数组中有数据的话
- 如何通过tastypie上传文件/图像
- 上传到nodejs时损坏的文件/图像
- 获取上载的文件/图像的名称
- Django:除主页模板外,静态文件图像URL路径中断
- Parsley验证文件图像没有'不起作用
- 如何在单击'时设置文件/图像的名称;将图像另存为'
- 上载要分析的配置文件图像
- 将数据库mysql中的文件图像插入excel
- 如何使用twitter api(js)获取用户配置文件图像
- 在javascript中从本地驱动器读取文件/图像
- 使用ajax上传文件图像时页面冻结