使用AWS-SDK-JS使用Plain Javascript将大文件作为流上传到s3

时间:2017-09-17 09:03:16

标签: javascript ruby-on-rails amazon-s3 aws-sdk-js

有一个漂亮的nice example可用于通过aws-sdk-js库将大文件上传到s3,但遗憾的是这是使用nodeJs fs。

我们有没有办法在Plain Javascript中实现同样的功能?这里有一个很好的Gist,它将大文件分解为较小的块,但是这仍然缺少传递给asw-sdk-js上传函数所需的nodeJs fs的.pipe功能。以下是Node中的相关代码段。

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

var body = fs.createReadStream('bigfile').pipe(zlib.createGzip());
var s3obj = new AWS.S3({params: {Bucket: 'myBucket', Key: 'myKey'}});
s3obj.upload({Body: body}).
  on('httpUploadProgress', function(evt) {
    console.log('Progress:', evt.loaded, '/', evt.total); 
  }).
  send(function(err, data) { console.log(err, data) });

Plain JS(非nodeJs)中是否有类似的东西?可用于Rails。

具体来说,是Plain JS中以下行的替代。

var body = fs.createReadStream('bigfile').pipe(zlib.createGzip());

1 个答案:

答案 0 :(得分:-1)

相同的link you provided包含针对浏览器的实现,它还使用AWS client SDK

// Get our File object
var file = $('#file-chooser')[0].files[0];

// Upload the File
var bucket = new AWS.S3({params: {Bucket: 'myBucket'});
var params = {Key: file.name, ContentType: file.type, Body: file};
bucket.upload(params, function (err, data) {
  $('#results').html(err ? 'ERROR!' : 'UPLOADED.');
});