2016-12-07 21 views
5

React dropzoneを使用して、onDropコールバックを使用して画像に正常にアクセスしました。しかし、イメージをサーバーに送信し、S3バケットに保存し、署名されたURLをイメージに戻してAmazon S3にアップロードしようとしています。Reject dropzone、画像のアップロード方法は?

これまで私がこれまでに持っていた情報ではこれを行うことができず、私の知る限りではこれを言及していないようです。

onDrop

は、ファイルと私のReduxのアクションでの関数呼び出しをトリガー:

export function saveImageToS3 (files, user) { 
    file = files[0] 
    // file.name -> filename.png 
    // file -> the entire file object 
    // filepreview -> blob:http:localhost:3000/1ds3-sdfw2-23as2 

    return { 
    [CALL_API] : { 
     method:'post', 
     path: '/api/image', 
     successType: A.SAVE_IMAGE, 
     body: { 
     name: file.name, 
     file: file, 
     preview: file.preview, 
     username: user 
     } 
    } 
    } 
} 

をしかし、私は私のサーバーに到達したとき、私はそれだけから参照です(このブロブ画像を保存するかどうかはわかりませんブラウザ。)

server.post('/api/image', (req, res) => { 
    // req.body.preview --> blob:http://localhost:3000/1ds3-sdfw2-23as2 
    // req.body.file -> {preview:blob:http://localhost:3000/1ds3-sdfw2-23as2}, no other properties for some reason 
}) 
+0

。 FileReader/ArrayBufferを使用してBLOBを読み込んでバイトを取得する必要があります。そのために、サンプルコードをたくさん用意しておく必要があります。しかし、私が少し調べたところ、おそらくそれがあなたを助けてくれるかもしれません:https://www.npmjs.com/package/react-dropzone-s3-uploader –

+0

他の人のために - 私もマルチサーバー側を使用しなければなりませんでしたマルチパートフォームデータを登録していないためです。私は新しいFormDataで以下の提案を使ってオブジェクトを作成し、次にノードの中でmulterをapp.post( '/ api/image'、upload.single( 'file')、function(){...})として使用しましたそれを世話してください。 –

答えて

7

は、ドロップゾーンは、マルチパート要求とともにサーバに送信することができるFileオブジェクトの配列を返す反応します。使用しているライブラリに依存して、別の方法で行うこともできます。次のように

Fetch APIを使用してそれが見えます:

var formData = new FormData(); 
formData.append('file', files[0]); 

fetch('http://server.com/api/upload', { 
    method: 'POST', 
    body: formData 
}) 

はあなたのような何かをするだろうSuperagentを使用する:

あなたはブロブのバイトではなく、ブロブのURLをアップロードしているように見えます
var req = request.post('/api/upload'); 
req.attach(file.name, files[0]); 
req.end(callback); 
+0

アップロードの進捗状況をどのように表示できますか? –

関連する問題