2017-03-18 15 views
1

This articleは、フォームを使用してAmazon S3またはminioにファイルをアップロードする方法を示しています。最も安全であるように見えるので、事前署名されたPOST URLポリシーメソッドを使用したいと思います。JavaScriptを使用して、ブラウザからMinioまたはS3に事前に署名されたPOST URLにファイルをアップロードする方法

ただし、ブラウザを使用してプログラムをミニオまたはS3にプログラムでアップロードしたいとします。言い換えれば、私はフォームではなく、javascriptを使いたいと思っています。

私は.field().attach()操作を使用して、フォームフィールドを設定してファイルをアップロードするのに使いやすい、superagentをよく知っています。

これは、ノードで動作します。これは、ブラウザでは動作しません

let cdnAgent = superagent; 
    let req = cdnAgent.post(r.data.pictureSet.uploadLink); 
    _.each(uploadForm, function(value, key) { 
    req.field(key, value); 
    }); 
    // upload file via the created signed policy 
    return req 
    .set('Content-Type', 'application/octet-stream') 
    .attach('file', 'test/data/test.jpg'); 
}).then(r => { 

しかし、.attach()がサポートされていない、と私はその周りに働いていたとき、私のjavascriptのドメインが分離されているので、私はCORSの問題に遭遇しました私のminioまたはS3ドメインからのドメイン。

この質問に答えるには、ドメイン間で動作するXMLHttpRequest、Axios、superagent、またはFetchを使用した完全な例をご覧ください。

これにはいくつかの類似の質問といくつかの回答がありますが、すべてが古くなっているように見え、技術は動いています。だから私はこれが重複した質問ではないと思う。

+1

バケット支持[カスタムCORS応答(http://docs.aws.amazon.com/AmazonS3/latest/dev/cors。 html)ので、問題のその部分を回避することができます。 –

+0

CORSはデフォルトでminioでオンになっていますが、これは私がテストしていたものです。しかし、Amazon CORSリンクのおかげで、おそらくそれはある時点で必要になるでしょう。 –

+0

申し訳ありませんが、私は脳にS3を持っていて、minioの複数の言及を完全に光りました。 –

答えて

1

https://github.com/harshavardhana/minio-js-browser-upload/あなたは、単にこのレポのクローンを作成し、その後http://localhost:8080

node presign-post-server.js 

訪問ブラウザを実行することができます。アップロードファイルをクリックして、選択したファイルをアップロードするだけです。 [1]

現在、この例は、https://play.minio.io:9000uploadsバケットを示しています。 [2]

[1] https://github.com/harshavardhana/minio-js-browser-upload/blob/master/index-post.html

[2] https://github.com/harshavardhana/minio-js-browser-upload/blob/master/presign-post-server.js

+0

実例、愛してください!さて、それをドッカー画像でパッケージ化してください:-)。しかし、これは正式なXMLHttpRequestの例です。 OPのコメントではSuperAgentの回答。今、誰かがAxiosの回答を投稿する必要があり、次のnoobはもっと良いでしょう... –

関連する問題