使用 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 容器 - 403 错误