2013-06-06 21 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跟蹤您的請求,以便您知道存儲服務發送的確切錯誤。 –

相關問題