サーバーに送信することなく、ファイルをS3にアップロードしようとしています。私はPUT
私のバケツにファイルを格納する要求をすることができます私はS3 URLを署名したエンドポイントを持っています。S3に画像をアップロードできません
私はJavaScript側でいくつかのことを試みましたが動作しませんでした。ここで
(私は単純なファイルのアップロードとそれ以上何を探していますので、私はAmazonのSDKを使用していないよ、と、したくないことは)私はJavaScriptで現在何をしようとしているのです:
uploadToS3 =() => {
let file = this.state.files[0];
let formData = new FormData();
formData.append('Content-Type', file.type);
formData.append('file', file);
let xhr = new XMLHttpRequest();
xhr.open('put', this.signed_url, true);
xhr.send(formData)
};
私はたくさんのオプションを試しましたが、私は実際にアップロードの進捗を気にしないので、フェッチを使うことを好みます。私は上記のように試してみるためにどこかからxhrコードを使用しました。これらはネットワーク通話を行い、動作するはずのように見えますが、そうではありません。
私は公開URLに行くとオブジェクトがS3に作成され、ダウンロードされ、イメージビューアを使用して開くと有効なJPGではないと言われます。
アップロードを正しく行っていないと思っています。ここで
は、私は郵便配達で行う方法は次のとおりです。私は、URLを正しい署名していると私はリクエストにバイナリイメージファイルを添付しました
注意してください。そして追加以下に示すように、コンテンツの種類を明記ヘッダは、画像/ JPEGです:私はS3にログインし、自分のバケットに行くとき
、私は画像を見ることができると私はそれが公共のURLとビューのに行くことができますブラウザで。これは完璧に機能し、まさに私が望むものです。今、JavaScriptでどのように達成できるかわかりません。
PS:郵便配達員のcode
をクリックしようとしましたが、私のファイルコードは生成されません。
'xhr.send(formData)' ...意味がありません。 S3でファイルを 'PUT'するときには、*すべてのフォーム構造*を使用しません。本体を送信するだけです。 'Content-Type:'はリクエストヘッダに入ります。ボディのformdataには入りません。 (他のヘッダーでも同じです)。アップロードしたファイルをダウンロードし、テキストエディタで表示します。あなたのコードが実際にS3に送信されていることを確認すると、問題は非常に明白になるはずです.S3は従順に保存し、その後の要求に対応します。 –
Wow @ Michael-sqlbot、私はもっと馬鹿だと感じることができませんでした:D私はこれを試したと思った。しかし、明らかにそれは今動作します。私はそれを受け入れることができるように答えとしてあなたのコメントを投稿できますか?ありがとう!あなたは私を救いました! –
ありがとうございます。要求されたとおりに完了します。 –