我正在尝试使用新的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
问题相关的所有疯狂(我认为在这种情况下仍然需要)。这里的代码可以在这里找到,我需要做几点修改:
这会导致文件结束异常,所以我怀疑这些值有问题或格式不正确。
从亚马逊的例子中我发现从网页上发帖看起来他们正在加密这些值:
Generating an AWS Signature v4 signature for uploading to s3
在非HTTP示例中,几乎看起来他们正在将值推送到不同的对象中。
有没有人这样做过?
答案 0 :(得分:0)
事实证明我错过了Content-Type值 - 是空白的,然后导致文件结束异常。相当令人惊讶的是,例外是如此模糊。哦,好吧。