有一个漂亮的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());
答案 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.');
});