使用 rest api 将块 blob 列表放在 azure 存储上时,指定的 XML 不是语法上有效的错误

Posted

技术标签:

【中文标题】使用 rest api 将块 blob 列表放在 azure 存储上时,指定的 XML 不是语法上有效的错误【英文标题】:XML specified is not syntactically valid error while putting block blob list on azure storage using rest api 【发布时间】:2013-01-18 13:16:10 【问题描述】:

我正在尝试将块 blob 列表放入 Azure 存储,但我收到“指定的 XML 在语法上无效”错误。我在 java 中使用 REST API。

XML:

<?xml version="1.0" encoding="utf-8"?>
<BlockList>
  <Latest>AA==</Latest>
  <Latest>AQ==</Latest>
  <Latest>Ag==</Latest>
  <Latest>Aw==</Latest>
  <Latest>BA==</Latest>
  <Latest>BQ==</Latest>
  <Latest>Bg==</Latest>
  <Latest>Bw==</Latest>
  <Latest>CA==</Latest>
  <Latest>CQ==</Latest>
  <Latest>Cg==</Latest>
  <Latest>Cw==</Latest>
  <Latest>DA==</Latest>
  <Latest>DQ==</Latest>
  <Latest>Dg==</Latest>
  <Latest>Dw==</Latest>
  <Latest>EA==</Latest>
  <Latest>EQ==</Latest>
  <Latest>Eg==</Latest>
  <Latest>Ew==</Latest>
  <Latest>FA==</Latest>
  <Latest>FQ==</Latest>
  <Latest>Fg==</Latest>
  <Latest>Fw==</Latest>
  <Latest>GA==</Latest>
  <Latest>GQ==</Latest>
  <Latest>Gg==</Latest>
</BlockList>

我使用HttpRequest.put(url).send(...)发送它

有什么想法可能是这里的问题吗?

更新:在没有任何块的情况下放置块列表时没有错误:

<?xml version="1.0" encoding="utf-8"?>
<BlockList>
</BlockList>

【问题讨论】:

你能告诉我们将块ID转换为Base64格式字符串的代码吗? 您是否尝试过不使用 XML 声明发送它? @GauravMantri 我现在不能。我正在使用一些标准的 java 库。您现在可以看到 ids 并且 azure 在放置单个块时不会抱怨 ids(使用 put block rest api) 基本上我试图做的是尝试使用以下代码(.Net)将其转换回字符串并获得一些错误数据:Encoding.UTF8.GetString(Convert.FromBase64String("AA== ")) 你能检查一下你是否正确地创建了块 ID。您可能要检查的另一件事是所有块 ID 字符串的长度相同。 @GauravMantri Base64String 很奇怪:所有库都使用不同的算法来双向转换,但 Azure 接受我的代码生成的 id。并且所有 id 的长度都相同 【参考方案1】:

我在没有库的情况下直接针对 REST API 实施同样的问题。默认 API 版本(除非您指定替代版本)不支持此 xml 架构进行分段上传。切换到x-ms-version: 2011-08-18 为我解决了这个问题。

【讨论】:

以上是关于使用 rest api 将块 blob 列表放在 azure 存储上时,指定的 XML 不是语法上有效的错误的主要内容,如果未能解决你的问题,请参考以下文章

使用 REST API 从 AzureDevOps 删除项目 (gitObjectType: blob)

QuickBlox - 如何使用 REST API + PHP 创建 blob 内容

Azure rest api 放置 blob

Azure 使用 REST api 和托管标识创建 blob 容器 - 403 错误

REST Api 使用访问密钥到 Azure Blob 存储

仅从 Azure 存储 [Azure-Blob][REST] 中的 Blob 列表获取特定元数据