使用存储服务api创建blob失败,其中一个HTTP标头的值格式不正确

时间:2016-06-20 11:08:20

标签: java azure azure-storage-blobs

我在java程序中使用Azure存储rest apis并尝试创建一个pageblob,然后使用put页面上传vhd。

这是我的代码:

url = String.format("https://myaccount.blob.core.windows.net/vhds/mypageblob");
Date now = new Date();
SimpleDateFormat dateFormatter = new SimpleDateFormat("E, dd MMM yyyy hh:mm:ss zzz");
dateFormatter.setTimeZone(TimeZone.getTimeZone("GMT"));
requestHeaders.put( "x-ms-date", dateFormatter.format(now));
requestHeaders.put( "x-ms-blob-type", "PageBlob");
requestHeaders.put("x-ms-blob-content-length", "4096");
requestHeaders.put("x-ms-blob-sequence-number", "0");
requestHeaders.put("Authorization", "SharedKey");

// Use api to get the shared key.
requestHeaders.put("myaccount", primary_key);

我收到错误'其中一个HTTP标头的值格式不正确。 400' 。知道如何调试这个吗?

1 个答案:

答案 0 :(得分:1)

我想说这里理想的选择是使用Azure Storage Java Client Library,可以通过Maven或GitHub(作为来源)获得。

如果这不可能并且由于某种原因您需要直接使用REST API,查看库的源代码可能仍然有用,看看我们如何实现所需的逻辑。

对于上面的代码,看起来您将与auth相关的信息拆分为两个单独的标头。它应该是一个标题,如下所示:

授权:SharedKey myaccount:ctzMq410TV3wS7upTBcunJTDLEJwMAZuFPfr0mrrA08 =

另外,您是直接转移存储主键吗?这不是身份验证的工作方式,您需要使用密钥来签署特定的"签名字符串"标识请求。有关如何向Azure存储进行身份验证的完整文档,请参阅https://msdn.microsoft.com/en-us/library/azure/dd179428.aspx