generateSharedAccessSignature不添加sv参数?

时间:2014-10-27 04:15:17

标签: azure azure-mobile-services

我正在尝试生成共享访问签名,并使用此处的代码(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”参数并且当我尝试上传它。

有什么想法吗?

2 个答案:

答案 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');
},