我在 java 程序中使用 Azure 存储 REST API,并尝试创建 pageblob,然后使用 put page 上传 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 header 之一的值格式不正确。 400'。知道如何调试这个吗?
最佳答案
我想说这里的理想选择是使用 Azure Storage Java Client Library ,可通过 Maven 或 GitHub(作为源)获得。
如果这是不可能的,并且由于某种原因您需要直接使用 REST API,那么查看库的源代码以了解我们如何实现所需的逻辑可能仍然有用。
对于上面的代码,看起来您正在将与身份验证相关的信息拆分为两个单独的 header 。它应该是一个标题,如下所示:
授权:SharedKey myaccount:ctzMq410TV3wS7upTBcunJTDLEJwMAZuFPfr0mrrA08=
另外,您是否直接转移存储主键?这不是身份验证的工作方式,您需要使用 key 来签署标识请求的特定“签名字符串”。请参阅https://msdn.microsoft.com/en-us/library/azure/dd179428.aspx有关如何向 Azure 存储进行身份验证的完整文档。
关于java - 使用存储服务 api 创建 blob 失败并显示 'The value for one of the HTTP headers is not in the correct format',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37920983/