我正在嘗試使用新簽名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
問題(我認爲仍然需要在這種情況下)相關聯的所有瘋狂。該代碼可以在這裏找到,有一些略微的修正我不得不做出:
這導致文件例外的結束,所以我懷疑我有什麼不對這些值或正在格式化他們不正確。
從亞馬遜的例子,我發現從一個網頁,它看起來像他們加密值發佈:
Generating an AWS Signature v4 signature for uploading to s3
在非HTTP的例子是幾乎看起來像他們推值轉換成不同目的。
有沒有人做過這件事?