AmazonのS3のREST APIを使用して、Androidデバイスから私が所有するバケットにファイルをアップロードしています。私はKEYとSECRET_KEYを持っていますが、リクエストで探しているsignatureValueを正しく生成する方法がわかりません。私は自分のサーバーにHttpPutを使っていますが、signatureValueを正しく生成する方法がわかりません。これまでのところ、ここで私が持っているものです。ここに続いてSDKを使用せずにAndroidからAmazon S3にファイルをアップロードする方法
HttpPut put = new HttpPut(URL);
String fmt = "EEE, dd MMM yyyy HH:mm:ss ";
SimpleDateFormat format = new SimpleDateFormat(fmt, Locale.US);
format.setTimeZone(TimeZone.getTimeZone("GMT"));
String method = "PUT";
String contentType = "application/octet-stream";
String date = format.format(new Date()) + "GMT";
String bucket = "/test-bucket52809/";
StringBuffer buf = new StringBuffer();
buf.append(method).append("\n\n");
buf.append(contentType).append("\n");
buf.append(date).append("\n");
buf.append(bucket);
String signature = percentEncodeRfc3986(hmac(buf.toString()));
は私が署名値を生成するために使用するメソッドです:
private void setupMac() throws UnsupportedEncodingException, NoSuchAlgorithmException, InvalidKeyException
{
byte[] secretyKeyBytes = KEY_SECRET.getBytes("UTF-8");
signingKey = new SecretKeySpec(secretyKeyBytes, "HmacSHA256");
mac = Mac.getInstance("HmacSHA256");
mac.init(signingKey);
}
private String hmac(String stringToSign) {
String signature = null;
byte[] data;
byte[] rawHmac;
try {
data = stringToSign.getBytes("UTF-8");
rawHmac = mac.doFinal(data);
signature = new String(Base64.encode(rawHmac, Base64.DEFAULT));
} catch (UnsupportedEncodingException e) {
throw new RuntimeException("UTF-8" + " is unsupported!", e);
}
return signature;
}
private String percentEncodeRfc3986(String s) {
String out;
try {
out = URLEncoder.encode(s, "UTF-8").replace("+", "%20")
.replace("*", "%2A").replace("%7E", "~");
} catch (UnsupportedEncodingException e) {
out = s;
}
return out;
}
私は、Amazon S3署名テスターを使用し、私の文字列が正しいでしたが、私正しいエンコードされた値を得られませんでした。助けや正しい方向へのプッシュをありがとう。
同じことをAWS Java SDKソースから見ていきます。 http://github.com/aws/aws-sdk-javaで簡単に見つけられるはずです。 – jarmod
SDKを使用してみませんか?これには、署名などを処理するためのボイラープレートコードが多数含まれているため、これらの低レベルの詳細を処理することはありません –
これには解決策がありますか? SDKなしでS3にアップロードしようとしています。 – dannyroa