覆盖Blob但保留元数据?

时间:2015-05-06 09:12:14

标签: azure metadata blob azure-storage-blobs

我需要在blob(文件的本地路径)上存储信息,并且能够覆盖该blob但保留信息。

我尝试了元数据方法,这正是我所寻找的,但是一旦我覆盖了blob,元数据也会被覆盖。

有什么方法可以覆盖blob但保留旧的元数据?

  

更新现有块blob会覆盖blob上的所有现有元数据

Reference

MSDN声明存在部分更新选项:

  

要执行块blob内容的部分更新,请使用   放置阻止列表操作。

Put Block List

问题是如何设置部分更新以仅更新blob的数据而不更新元数据?

谢谢。

更新(进一步信息):

我是一个从客户端获取文件并将文件返回给客户端的云服务。

所以实际发生的是:

客户端向服务发送请求以生成访问以在blob存储中存储一个blob,服务返回给他URL + SAS,我还创建了一个包含一个字符的实际blob,以便在blob上保存元数据。 / p>

客户端获取URL + SAS并开始使用Web客户端库上传文件。

一旦客户端上传了文件,他就会向服务器发送请求,并提供与他提供的相同的URL(并且告诉服务,这是我的文件做你的事情)

服务器将操作该文件并覆盖相同的blob并返回整个操作的日志。

客户端可以读取日志并可以下载" new"来自同一网址的文件。

你可能会注意到问题是我让客户端覆盖我的blob,他(客户端)要求我上传文件,我给他返回URL + SAS但是当我生成SAS令牌时我也创建了一个blob保存元数据直到用户上传到实际数据,所以我不能要求用户首先获取元数据然后上传(我需要上传来自Webclient库,没有任何特殊依赖,如Azure API)。 / p>

总结

所以我的问题答案的底线是#34;不,没有办法覆盖blob并保存元数据"但是Gaurav Mantri对我的情况有一个很好的解决方法。

2 个答案:

答案 0 :(得分:3)

这是您问题的一种可能解决方案。目前,当您创建SAS网址时,由于您的最终用户使用该网址上传文件,因此具有Write权限。您所做的就是修改SAS网址以包含Read权限。

在客户端应用程序上,一旦收到SAS URL,您首先要做的是使用Get Blob Metadata REST API操作读取blob的元数据。您不需要为此目的使用Azure SDK。您只需使用Head执行https://[account].blob.core.windows.net/[container]/[blob]?sastoken&comp=metadata请求,您的请求网址为WebClient。获取元数据后,您可以在用户上传文件时将其作为x-ms-meta-*请求标头传回。

答案 1 :(得分:2)

您可以先调用Get Blob Metadata来获取现有blob的元数据,然后使用获取的元数据调用Put Block List,以便保留原始元数据。