java - 使用存储服务 api 创建 blob 失败并显示 'The value for one of the HTTP headers is not in the correct format'

标签 java azure azure-blob-storage

我在 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/

相关文章:

c# - 为什么我上传到 Azure 的图像包含无法显示的错误?

java - 仅当在 while 循环中调用函数时,将文件发送到 blob 才有效

java - buildnumber-maven-plugin 得到了 svn : Authentication required for 'Subversion Repository' error

c# - 连接到 Azure Blob 并删除文件(如果存在)

java - Oracle 和 Subversion 的集成

azure - 如何设置 Azure 存储模拟器以监听所有接口(interface)?

azure - 在 ARM 模板中隐藏新的 vNet 选项

asp.net - 无效操作异常 : Could not find 'UserSecretsIdAttribute' on assembly

java - Varargs 污染了堆

java - 使用 DropWizard 计时器查找代码块的执行时间