我需要在blob(文件的本地路径)上存储信息,并且能够覆盖该blob但保留信息。
我尝试了元数据方法,这正是我所寻找的,但是一旦我覆盖了blob,元数据也会被覆盖。
更新现有块blob会覆盖blob上的所有现有元数据
MSDN声明存在部分更新选项:
要执行块blob内容的部分更新,请使用 放置阻止列表操作。
问题是如何设置部分更新以仅更新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对我的情况有一个很好的解决方法。
答案 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,以便保留原始元数据。