在REST请求中设置元数据以将blob放入AZURE中

时间:2013-06-06 09:48:41

标签: azure azure-storage azure-storage-blobs

我可以使用Azure提供的REST API将文件上传到azure blob。

我想在我执行put blob请求时设置元数据,当我将其设置为标题时显示here我无法上传文件并获得跟踪异常org.apache.http.client.ClientProtocolException。< / p>

从下面代码的最后一行

    HttpPut req = new HttpPut(uri);
    req.setHeader("x-ms-blob-type", blobType);
    req.setHeader("x-ms-date", date);
    req.setHeader("x-ms-version", storageServiceVersion);
    req.setHeader("x-ms-meta-Cat", user);
    req.setHeader("Authorization", authorizationHeader);

    HttpEntity entity = new InputStreamEntity(is,blobLength);
    req.setEntity(entity);

    HttpResponse response = httpClient.execute(req);

关于同样的问题,我有两个问题。

  1. 可以设置不同的元数据,避免覆盖文件吗? See my question for the same here

  2. 如果是第一个问题,如何在REST请求中设置元数据以将blob放入Azure?

  3. 请帮助

1 个答案:

答案 0 :(得分:1)

所以有一些事情要发生在这里。

关于您获得的错误,这是因为您在计算授权标头时没有添加元数据标头。请在此处阅读Constructing the Canonicalized Headers String部分:http://msdn.microsoft.com/en-us/library/windowsazure/dd179428.aspx

基于此,您需要更改以下代码行(来自您的博客文章)

String canonicalizedHeaders = "x-ms-blob-type:"+blobType+"\nx-ms-date:"+date+"\nx-ms-version:"+storageServiceVersion;

String canonicalizedHeaders = "x-ms-blob-type:"+blobType+"\nx-ms-date:"+date+"\nx-ms-meta-cat"+user+"\nx-ms-version:"+storageServiceVersion;

(注意:我刚刚在记事本中进行了这些更改,因此它们可能无法正常工作。请转到我上面提到的链接,以正确创建规范化的标题字符串。

  

可以设置不同的元数据,避免覆盖文件吗?

不确定你的意思。您可以通过在博客上执行Set Blob Metadata操作来更新blob的元数据。