0

我正在尝试将某个文件上传METADATA到 azure blob 容器。

当我使用 .net SDK 执行此操作时,它会按原样发送put所有metadata内容。

但是,如果我尝试使用 Java,它会发送 3puts并且在metadata我发出命令之前不会反映cBlockBlob.uploadProperties(),直到 3rd put

为什么会通过 3 puts?这是JAVA sdk中的问题吗?

这是第一把

*PUT /mycontainer/0721ef8f-8d70-4b91-9d1f-04757363f903.xml?blockid=AAAAAEm%2FC%2FE%3D& comp=block&sr=c&timeout=4&si=WriteOnly& sig=eUe%2Fe7kcFcmiIzOVNgqbXd%2BjlIN3ZQd8fkQq3IsHQVQ%3D HTTP/1.1
x-ms-version: 2011-08-18
User-Agent: WA-Storage/Client v0.1.1
Content-Type: 
Host: certainhost.blob.core.windows.net
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
Connection: keep-alive
Content-Length: 4613*

这是第二次放

*PUT /mycontainer/0721ef8f-8d70-4b91-9d1f-04757363f903.xml?comp=blocklist&sr=c&timeout=4&si=WriteOnly&sig=eUe%2Fe7kcFcmiIzOVNgqbXd%2BjlIN3ZQd8fkQq3IsHQVQ%3D HTTP/1.1
x-ms-version: 2011-08-18  
User-Agent: WA-Storage/Client v0.1.1
Content-Type: 
Content-MD5: hYRJFeM5RFH29bPj3oxhwA==
Host: certainhost.blob.core.windows.net
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
Connection: keep-alive
Content-Length: 100*

<?xml version='1.0' encoding='UTF-8'?><BlockList><Uncommitted>AAAAAEm/C/E=</Uncommitted></BlockList>

这是第 3 个 put(显示 required 的那个metadata

*PUT /mycontainer/0721ef8f-8d70-4b91-9d1f-04757363f903.xml?comp=properties&sr=c&timeout=4&si=WriteOnly&sig=eUe%2Fe7kcFcmiIzOVNgqbXd%2BjlIN3ZQd8fkQq3IsHQVQ%3D HTTP/1.1
x-ms-version: 2011-08-18
User-Agent: WA-Storage/Client v0.1.1
Content-Type: 
x-ms-blob-content-encoding: utf-8
x-ms-meta-x-ms-meta-versionCFDI: 3.2
Host: certainhost.blob.core.windows.net
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
Connection: keep-alive
Content-Length: 0*

这是.net SDK中唯一的

*PUT /mycontainer/0721ef8f-8d70-4b91-9d1f-04757363f903.xml?comp=properties&sr=c&timeout=4&si=WriteOnly&sig=eUe%2Fe7kcFcmiIzOVNgqbXd%2BjlIN3ZQd8fkQq3IsHQVQ%3D HTTP/1.1
x-ms-version: 2009-09-19
User-Agent: WA-Storage/6.0.6002.18312
x-ms-blob-type: BlockBlob
x-ms-meta-versionCFDI: 3.2
Host: certainhost.blob.core.windows.net
Content-Length: 6841
Connection: Keep-Alive*

其他的,这是什么意思?

<?xml version='1.0' encoding='UTF-8'?><BlockList><Uncommitted>AAAAAEm//E=</Uncommitted></BlockList>

它在第二次放置中发​​送,.net 不会显示它。

4

1 回答 1

0

我相信正在发生的事情是 JAVA SDK 正在将您的文件分成块并上传这些块。第一个 PUT 请求是“PUT Block”请求,第二个是“Commit Block List”请求,第三个是“Set Metadata”请求。根据 REST API 文档,您也可以在“提交阻止列表”操作期间设置 blob 的元数据 (http://msdn.microsoft.com/en-us/library/windowsazure/dd179467.aspx)。.Net SDK 仅在一个请求中上传此文件,而 Java SDK 将文件拆分为块并上传,这似乎很奇怪。如果这是在 Java SDK 中实现的方式,我不会感到惊讶。您尝试上传的文件的大小是多少?

关于您的第二个问题,这是“提交阻止列表”操作的有效负载。

于 2012-09-27T03:40:32.680 回答