S3文件上传文件对象使用节点js

S3 file upload file object using node js

本文关键字:文件 节点 js 对象 S3      更新时间:2023-09-26

我使用的是Sailsjs 0.12.1,node.js 4.2.6

我想通过API从前端上传文件(angular.js),从后端上传文件到AWS S3存储桶。

前端我正在将文件发送到api。在后台,我得到了带有名称的文件,但在将文件上传到S3时,我收到了错误

无法确定[对象对象]的长度

我在谷歌上搜索了这个错误,发现了很多链接,但我运气不好。

后端

 uploadPersonAvtar: function(req, res) {
    var zlib = require('zlib');
    var file = req.file('image');
    var mime = require('mime');
    data = {
        Bucket: 'bucket',
        Key : 'my_key',
        Key: file.name,
        Body: file,
        ContentType: mime.lookup(file.name)
      };
    // Upload the stream
    var s3obj = new AWS.S3(S3options);
    s3obj.upload(data, function(err, data) {
        if (err) console.log("An error occurred", err);
        console.log("Uploaded the file at", data);
    })
}

我的方法正确吗

如果是的话,我做错了什么。

我想知道如何使用文件对象上传文件
我可以创建一个读取流,但我没有文件路径。当我创建文件对象时,我得到了错误:路径必须是字符串

您可以查看以下关于流式数据的示例:Amazon S3:上传任意大小的流(上传)

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(evt); }).
  send(function(err, data) { console.log(err, data) });