使用元数据Azure JAVA API上载文件

时间:2012-09-26 20:03:26

标签: java azure metadata

我正在尝试将包含某些METADATA的文件上传到azure blob容器中。

当我使用.net SDK时,只需发送一个put和所有metadata

但是,如果我尝试使用Java,它会发送3 putsmetadata将不会反映,直到我发出cBlockBlob.uploadProperties()命令,直到第3 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次放置(显示所需的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不会显示它。

1 个答案:

答案 0 :(得分:0)

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

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