2013-06-06 81 views
0

我可以使用Azure提供的REST API将文件上载到azure blob。在REST请求中设置元数据以将BLOB放入AZURE

我想设置元数据时,我正在做blob的请求,当我将它设置为标头如图所示here我很难上传文件,并得到以下异常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. 可以设置不同的元数据,避免了文件的覆盖? See my question for the same here

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

请帮助

+0

您可以分享生成授权标头的代码吗?你可能想要确保的一件事是你在自动化头部计算中也包含了自定义的metedata头文件。您也可能想要追踪Fiddler中的请求/响应,以查看存储服务返回的确切错误消息。 –

+0

http://techblogvjd.blogspot.in/2013/06/virustechblog1.html 这与我所做的一样,只是单个更改,使用inputstream而不是文件 –

回答

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; 

(注:我刚才在记事本中做出这些改变所以他们可能无法正常工作请转到我上面提到的正确创建规范化标题字符串的链接

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

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

+0

我已经完成了这项工作,但仍然给出了相同的结果例外情况:( –

+0

)如果您粘贴了整个代码,它将会有所帮助,并尝试通过Fiddler跟踪您的请求,以便您知道存储服务发送的确切错误。 –

相关问题