2014-10-27 38 views
0

我正在尝试生成共享访问签名,并使用此处的代码(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)生成SAS自定义API。generateSharedAccessSignature不添加sv参数?

调用“generateSharedAccessSignature()”时似乎缺少sv = 2014-02-14参数。

SAS网址似乎不起作用,当我尝试它(获得400 xml无效错误),但如果我尝试从Azure Management Studio生成的SAS,该URL包含“sv”参数,并且当我尝试用它上传。

任何想法?

回答

1

基于Storage Service REST API Documentation,sv共享访问签名中的参数在存储服务版本2014-02-14中引入。我的猜测是,Azure移动服务使用的是旧版本的存储服务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节点。

+0

嘿拉夫,事实上,我也通过了出去,把SV参数,只需添加请求头作为XHR的一部分工作: xhr.set RequestHeader( 'X-MS-版本', '2014年2月14日'); 因此,而不是它是生成的SAS URL的一部分,将它作为PUT头的一部分,实际上使SAS工作。 不确定为什么400 XML错误回来了,在这两种情况下,blocklist与上面的语法完全匹配。 – 2014-10-27 05:19:36

+0

如果您在阻止列表XML中使用''元素,请将其更改为''。 – 2014-10-27 05:29:03

1

出离开SV参数并将其设置为PUT请求头的一部分奋力使用:

xhr.setRequestHeader( 'X-MS-版本', '2014年2月14日');

你可以看看这个例子为一个蓝色的文件上传脚本: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'); 
},