使用NodeJS + Express,aws-sdk直接将文件流传输到s3

iam*_*box 7 file-upload amazon-s3 node.js express

我想通过带有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 
  }
Run Code Online (Sandbox Code Playgroud)

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");
});    
Run Code Online (Sandbox Code Playgroud)

Joh*_*sen 15

现在支持流式传输(请参阅文档),只需将流传递为Body:

var fs = require('fs');
var someDataStream = fs.createReadStream('bigfile');
var s3 = new AWS.S3({ params: { Bucket: 'myBucket', Key: 'myKey' } });
s3.putObject({ Body: someDataStream, ... }, function(err, data) {
  // handle response
})
Run Code Online (Sandbox Code Playgroud)

  • 这是否不需要在将文件上传到S3之前将其存储在硬盘上?我以为OP希望跳过保存到磁盘并直接上传到S3的步骤……然后,再次谈到文件上传,我是一个完全新手。 (2认同)