【问题标题】:Upload files with metadata, Azure JAVA API上传带有元数据、Azure JAVA API 的文件
【发布时间】:2012-09-26 20:03:25
【问题描述】:

我正在尝试将具有特定 METADATA 的文件上传到 azure blob 容器。

当我使用 .net SDK 执行此操作时,它会简单地发送一个 put 和所有 metadata

但是,如果我尝试使用 Java,它会发送 3 个 puts,而 metadata 在我发出 cBlockBlob.uploadProperties() 命令和第三个 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>

这是第三个 put(显示需要 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>

在第二个put中发送,.net不会显示它。

【问题讨论】:

    标签: java azure metadata


    【解决方案1】:

    我相信正在发生的事情是 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 中实现的方式,我不会感到惊讶。您尝试上传的文件大小是多少?

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-09
      • 1970-01-01
      • 2015-06-25
      • 1970-01-01
      相关资源
      最近更新 更多