2017-07-24 32 views
0

我正在嘗試使用新簽名V4,而不是使用SDK,使用HttpURLConnection(我最近從HttpClient升級到最新版本)在Android上直接發佈到Amazon S3。我有HttpURLConnection部分與以前的簽名版本(即使與多部分實體),所以我不認爲這是問題,但我提到它的情況下。Android AWS S3簽名V4使用HttpURLConnection發佈

的代碼看起來是這樣的:

String charset = "UTF-8"; 
MultiPartUtility multipart = new MultiPartUtility(url, charset); 
multipart.addFormField("Content-Type", contentType); 
multipart.addFormField("Policy", policy); 
multipart.addFormField("key", key); 
multipart.addFormField("acl", acl); 
SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMdd"); 
String date = formatter.format(new Date()); 
String credential = accessKey + "/" + date + "/" + region + "/s3/aws4_request"; 
multipart.addFormField("X-Amz-Signature", signature); 
multipart.addFormField("X-Amz-Credential", credential); 
multipart.addFormField("X-Amz-Date", date + "T000000Z"); // 
multipart.addFormField("x-amz-meta-uuid", uuid"); 
multipart.addFormField("x-amz-server-side-encryption","AES256"); 
multipart.addFormField("X-Amz-Algorithm","AWS4-HMAC-SHA256"); 
multipart.addFormField("x-amz-meta-tag",""); 

multipart.addFilePart("file", file); 
String response = multipart.finish(); 

MultiPartUtility類只是處理與MULT部分實體職位新HttpURLConnection問題(我認爲仍然需要在這種情況下)相關聯的所有瘋狂。該代碼可以在這裏找到,有一些略微的修正我不得不做出:

http://www.codejava.net/java-se/networking/upload-files-by-sending-multipart-request-programmatically

這導致文件例外的結束,所以我懷疑我有什麼不對這些值或正在格式化他們不正確。

從亞馬遜的例子,我發現從一個網頁,它看起來像他們加密值發佈:

Generating an AWS Signature v4 signature for uploading to s3

在非HTTP的例子是幾乎看起來像他們推值轉換成不同目的。

有沒有人做過這件事?

回答

0

所以事實證明,我錯過了Content-Type值 - 是空白的,然後導致文件異常結束。令人驚訝的是,例外非常模糊。好吧。

相關問題