我可以使用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);
关于同样的问题,我有两个问题。
可以设置不同的元数据,避免覆盖文件吗? See my question for the same here
如果是第一个问题,如何在REST请求中设置元数据以将blob放入Azure?
请帮助
答案 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的元数据。