使用HttpURLConnection的Android AWS S3 Signature V4 Post

时间:2017-07-24 16:47:25

标签: android amazon-s3 httpurlconnection

我正在尝试使用新的Signature V4直接发布到Android上的Amazon S3,而不是使用他们的SDK,使用return this(我最近从HttpURLConnection升级)。我有HttpClient部分使用以前的签名版本(即使是多部分实体),所以我不认为这是问题,但我提到它以防万一。

代码如下所示:

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问题相关的所有疯狂(我认为在这种情况下仍然需要)。这里的代码可以在这里找到,我需要做几点修改:

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示例中,几乎看起来他们正在将值推送到不同的对象中。

有没有人这样做过?

1 个答案:

答案 0 :(得分:0)

事实证明我错过了Content-Type值 - 是空白的,然后导致文件结束异常。相当令人惊讶的是,例外是如此模糊。哦,好吧。