EmberJSを使用してフロントエンドクライアントを構築しました。具体的にはember-uploaderを使用して、S3に直接ファイルをアップロードします。私が立ち往生しているところでは、バックエンドサーバー(Java Dropwizardマイクロサービス)を使ってAmazonに行く前に、そのリクエストに正しく署名することができないようです。AWS-Java SDK経由でブラウザにS3のアップロードリクエストを送信
私はGeneratePresignedUrlRequest
を作成できますが、私が使用しているフロントエンドライブラリでは、jsonオブジェクトがサーバから戻ってくることを望んでいるので、そのオブジェクトをGeneratePresignedUrlRequest
に分割しようとしています。
現時点ではすべて問題なく表示されますが、正しく作成する方法を練習できないため、policy
が見つかりません。
GeneratePresignedUrlRequest
private String createSignedUrl() {
GeneratePresignedUrlRequest generatePresignedUrlRequest = new GeneratePresignedUrlRequest("test-bucket", "test.txt");
generatePresignedUrlRequest.setMethod(HttpMethod.PUT);
return amazonS3.generatePresignedUrl(generatePresignedUrlRequest).toString();
}
から来ている
private SignRequestObject createSignRequestObject(List<NameValuePair> valuePairs) {
SignRequestObject request = new SignRequestObject();
request.setKey("test.txt");
request.setBucket("test-bucket");
request.setPolicy("?");
for (NameValuePair pairs : valuePairs) {
if (pairs.getName().equals("X-Amz-Credential")) {
request.setCredentials(pairs.getValue());
}
if (pairs.getName().equals("X-Amz-Signature")) {
request.setSignature(pairs.getValue());
}
if (pairs.getName().equals("X-Amz-Algorithm")) {
request.setAlgorithm(pairs.getValue());
}
if (pairs.getName().equals("X-Amz-Date")) {
request.setDate(pairs.getValue());
}
}
return request;
}
:私はしようとするべき
// Ruby example, but shouldn't matter
{
expiration: @expires,
conditions: [
{ bucket: 'sandbox' },
{ acl: 'public-read' },
{ expires: @expires },
{ success_action_status: '201' },
[ 'starts-with', '$key', '' ],
[ 'starts-with', '$Content-Type', '' ],
[ 'starts-with', '$Cache-Control', '' ],
[ 'content-length-range', 0, 524288000 ]
]
)
これを自分で構築するか、aws-sdkにはこのためのメソッドがありますか?私はAWS Signature Version 4
を見ていますが、それを使う方法もわかりません。
ブラウザ経由でアップロードしようとすると、私はアマゾンから403を手に入れています。
私は強くJets3tを使用することをお勧めします。 – chrylis
jets3tのどの部分を拡張できますか?私がドキュメントを見て見ることができる最も近いのは、S3 POSTフォームです。バックエンドサービスを介してフォームをレンダリングしたくないのですが、 –
バックエンドを使用して作成することを強く推奨します。少なくとも署名が必要な場合は、必要なパラメータを指定してAJAXポストをサーバに送信し、サーバは署名を送り返してから、結合したフォームと署名をクライアント側のアップローダに送ります。 – chrylis