0

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

我想在我请求放置 blob 时设置元数据,当我将其设置到标题中时,如图所示我无法上传文件并出现以下异常org.apache.http.client.ClientProtocolException

从下面代码的最后一行

    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. 可以设置不同的元数据,避免覆盖文件吗?在这里查看我的问题

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

请帮忙

4

1 回答 1

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 的元数据。

于 2013-06-06T15:19:34.460 回答