我正在尝试生成共享访问签名,并使用此处的代码(http://blogs.msdn.com/b/brunoterkaly/archive/2014/06/13/how-to-provision-a-shared-access-signatures-that-allows-clients-to-upload-files-to-to-azure-storage-using-node-js-inside-of-azure-mobile-services.aspx)来生成自定义API。
调用“generateSharedAccessSignature()”时,似乎缺少sv = 2014-02-14参数。
当我尝试使用SAS url时,它似乎不起作用(获得400 xml无效错误)但是如果我尝试从Azure Management Studio生成的SAS,则URL包含“sv”参数并且当我尝试上传它。
有什么想法吗?
答案 0 :(得分:1)
基于Storage Service REST API Documentation
,共享访问签名中的sv
参数在存储服务版本2014-02-14
中引入。我的猜测是Azure Mobile Service使用的是旧版本的存储服务API,这就是您在SAS令牌中看不到sv
参数的原因。
因此,您可能会收到400错误(无效的XML)。在早期版本的存储服务API中,提交阻止列表的XML语法与当前使用的不同。我有一个用户来到我的博客帖子抱怨同样的错误。请在执行提交阻止列表操作时尝试以下XML语法,并查看错误是否消失:
<?xml version="1.0" encoding="utf-8"?>
<BlockList>
<Block>[base64-encoded-block-id]</Block>
<Block>[base64-encoded-block-id]</Block>
...
<Block>[base64-encoded-block-id]</Block>
</BlockList>
请注意,我们没有使用Latest
节点。相反,我们正在使用Block
节点。
答案 1 :(得分:1)
退出sv参数并将其设置为PUT请求标头的一部分使用:
xhr.setRequestHeader(&#39; X-MS-版本&#39;&#39; 2014年2月14日&#39);
您可以查看此示例以获取azure文件上传脚本:http://gauravmantri.com/2013/02/16/uploading-large-files-in-windows-azure-blob-storage-using-shared-access-signature-html-and-javascript/
...这将与问题的原始博客链接中生成的SAS一起使用 - http://blogs.msdn.com/b/brunoterkaly/archive/2014/06/13/how-to-provision-a-shared-access-signatures-that-allows-clients-to-upload-files-to-to-azure-storage-using-node-js-inside-of-azure-mobile-services.aspx
在beforeSend中添加请求标头,如下所示:
beforeSend: function(xhr) {
xhr.setRequestHeader('x-ms-version','2014-02-14');
},