JavaScriptのAWS Sdkで私の問題の解決策が見つかりませんでした。
我々の場合には、ワークフロー(署名/ポリシー世代)にIは、単純なXmlHttpRequestのにSDKを置き換えこの問題およびいるFormDataオブジェクトを解決するために、この資料に示さhttps://aws.amazon.com/articles/1434
の同じである、ことを見えます私のファイルをs3にプッシュします。ペイロードは、アプリケーションの他の部分との互換性を維持するために変更することはできませんでした。この方法を使用するには、AccessKey、ポリシー、署名、キー(ファイルキー)、およびファイルをformDataに格納する必要があります。ポリシー/署名がどのように生成されたかによって、formDataに他のフィールドを追加して機能させる必要があります。この場合、私はsucess_action_statusを追加しました。
FORMDATAマウントするためのコード:、このフォームデータと
var formData = new FormData();
formData.append('key', <KEY>);
formData.append('AWSAccessKeyId', <ACCESS_KEY>);
formData.append('policy', <POLICY>);
formData.append('signature', <SIGNATURE>);
formData.append('success_action_status', <SUCCESS_CODE>);
formData.append('file', file, file.name);
をこの
var request = new XMLHttpRequest();
request.open("POST","https://<YOUR BUCKET>.s3.amazonaws.com");
request.setRequestHeader("enctype", "multipart/form-data");
ようにXMLHttpRequestを作成し、FORMDATAオブジェクトを渡す要求を送信します。
request.send(formData);
formDataの値は、生成されたポリシーを尊重する必要があります。
それは、このリスナーを追加することにより、アップロードプロセスを取得することが可能です:
request.upload.addEventListener('progress', function(e){
console.log(e);
});
は助けありがとうございました。
バケットにCORSポリシーを追加する必要があります。これにより、バケット上の署名を使用して他の操作が可能になります。 – datasage
@datasageこんにちは。バケットには既にCORSがあります。主な問題は、フロントエンドで自分の資格情報(アクセスキーとアクセス秘密鍵)を直接使用することができないことです。開発時に使用していて、動作しています。バックエンドから送られてきたjsonペイロードがあります署名、ポリシーハッシュ、およびオブジェクトキーをファイルに追加します。これらのパラメータは、Rails sdkを使用してバックエンドによって生成されます。 S3 Javascript sdkを使用してファイルを送信すれば十分ですか?私は秘密鍵なしでフロントエンドからファイルを送る方法を知らない。 –
はい、アクセスキーと生成した署名が必要です。このサンプルを見てください:http://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-post-example.html – datasage