画像をAWSのAPI Gateway経由でLambdaにPostしたいのですが、2点ひっかかっています。
formには画像のアップロードボタンとスライドバーがあり、Post先のurlがAWSのAPI Gatewayです。API Gateway経由でAWS Lambdaを呼び出し、S3に画像を保存したいです。
困っていることの1つはCORSの対策で、API Gateway側には
Access-Control-Allow-Headers 'Content-Type,X-Amz-Date,Authorization'
Access-Control-Allow-Methods 'POST'
Access-Control-Allow-Origin '*'
が設定してあります。jQuery側で叩くと、画像をPostしているのでcontentType: falseにしているせいか、CORSに引っかかってしまいます。
どう設定するのが正しいのでしょうか。クライアント側での設定も必要であれば教えていただきたいです。
2つ目はそもそも画像の取り扱いで、var formdata = new FormData($('#form').get(0));では「data:image/jpeg;base64,/(英数字の文字列)」が取得できます。これをS3に保存したいのですが、この値自体をObjectとして保存するのだとうまく画像が保存できませんでした。(S3上にオブジェクトはできますが、壊れているとかで開けませんでした。なので、保存する対象を間違っているか、処理を間違っていると思います)
どう保存すればよいのでしょうか。
ソースコードは下記です。
html
1<form id="form" action="#!"> 2 <input type="file" name="fileupload" class="uploadFile"> 3 <input type="range" min="1" max="50" value="25" class="slider" id="hoge"> 4 <button id="submit-btn" class="btn btn-primary" type="submit">Submit</button> 5</form>
javascript
1$("#submit-btn").click(function(e){ 2 var hoge = $('#hoge').val(); 3 var formdata = new FormData($('#form').get(0)); 4 formdata.append("hoge", hoge); 5 $.ajax({ 6 url: url, 7 type: 'post', 8 contentType: false, 9 processData: false, 10 cache: false, 11 data: formdata 12 }).done(function () { 13 console.log("done"); 14 }) 15})
回答2件
あなたの回答
tips
プレビュー