我在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' 。知道如何调试这个吗?
答案 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。