11

NodeJS を使用してブラウザーを介していくつかの大きなファイルを直接 s3 にアップロードしたいのですが、s3 にアップロードするためにこのファイルを準備する方法が不明です。このケースを処理するためのより良いモジュール (Knox など) があるかもしれませんが、私にはわかりません。何かご意見は?

ファイル オブジェクト

  file: { 
     webkitRelativePath: '',
     lastModifiedDate: '2013-06-22T02:43:54.000Z',
     name: '04-Bro Safari & UFO! - Animal.mp3',
     type: 'audio/mp3',
     size: 11082039 
  }

S3 putObject

var params = {Bucket: 'bucket_name/'+req.user._id+'/folder', Key: req.body['file']['name'], Body: ???};
s3.putObject(params, function(err, data) {
    if (err)
      console.log(err);
    else
      console.log("Successfully uploaded data to myBucket/myKey");
});    
4

5 に答える 5

3

メソッドはストリーミングされません。s3.putObject()私が見たところ、s3 モジュールはストリーミングをサポートしていません。ただし、Knoxでは、 を使用できますClient.putStream()。質問のファイル オブジェクトを使用すると、次のようなことができます。

var fs = require('fs');
var knox = require('knox');

var stream = fs.createReadStream('./file');
var client = knox.createClient({
  key: '<api-key-here>',
  secret: '<secret-here>',
  bucket: 'learnboost'
});

var headers = {
  'Content-Length': file.size,
  'Content-Type': file.type
};

client.putStream(stream, '/path.ext', headers, function(err, res) {
  // error or successful upload
});
于 2013-11-04T04:36:25.997 に答える
1

1 つのオプションは、代わりに multer-s3 を使用することです: https://www.npmjs.com/package/multer-s3

この投稿にもいくつかの詳細があります: NodeJS と Multer を使用して S3 に画像をアップロードします。ファイル全体を onFileUploadComplete にアップロードする方法

于 2015-07-28T01:39:27.430 に答える
0

コードがストリーミングされていません。どこかへの呼び出し、pipeまたは少なくともdataイベント ハンドラーを使用して手動でパイプするコードを確認する必要があります。おそらく、ストリーミング実装ではない、express bodyParser ミドルウェアを使用しています。リクエスト本文全体を一時ファイルとしてローカルファイルシステムに保存します。

「node.js s3 stream」の Web 検索から有望な結果が得られたため、具体的な提案は行いません。5 分間読んでから、少なくともストリーミングの試みであるスニペットを投稿してください。大まかに何かを手に入れたら、それを正しく理解するのに役立ちます.

于 2013-11-04T04:37:04.813 に答える