【问题标题】:Creating a blob using storage services api fails with 'The value for one of the HTTP headers is not in the correct format'使用存储服务 api 创建 blob 失败并显示“HTTP 标头之一的值格式不正确”
【发布时间】:2016-10-21 14:50:21
【问题描述】:

我在 java 程序中使用 Azure storage rest apis 并尝试创建一个 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 标头的值格式不正确。 400'。知道如何调试吗?

【问题讨论】:

  • 能否请您分享如何在您的项目中生成 Sharekey。根据我的经验,错误键会导致此问题。此外,您可以使用 fiddler 解决此问题。

标签: java azure azure-blob-storage


【解决方案1】:

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

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

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

授权:SharedKey myaccount:ctzMq410TV3wS7upTBcunJTDLEJwMAZuFPfr0mrrA08=

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

【讨论】:

  • 非常感谢亚当的回复。我会按照你的建议尝试客户端库,这有帮助!
猜你喜欢
  • 2019-01-27
  • 1970-01-01
  • 1970-01-01
  • 2018-06-01
  • 2018-09-01
  • 1970-01-01
  • 2020-08-14
  • 2019-01-18
  • 1970-01-01
相关资源
最近更新 更多