2016-05-13 148 views
0

我使用Sailsjs 0.12.1,Node.js的4.2.6S3文件上傳文件對象使用節點JS

欲通過API,並從文件從前端(angular.js)上傳後端我想將文件上傳到AWS S3存儲桶。

前端我將文件發送到api。在後端我得到這個名字的文件,但同時將文件上傳到S3,我發現了錯誤

Cannot determine length of [object Object]

我谷歌的錯誤,發現很多鏈接,但是我的運氣不好。

後端

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); 
    }) 
} 

Is my approach is correct

If yes what I'm doing wrong.

我想知道如何使用文件對象要上傳的文件。
我可以創建一個讀流,但是當我創造,我發現了錯誤的文件對象,我沒有文件路徑:路徑必須是一個字符串

+1

@set它不只是複製 - 這裏的問題是技術,「如何當你不知道文件的大小,上傳」是有點不同的,你需要創建一個流 –

+0

@設置這是一個不同的問題我想上傳文件使用文件對象 –

回答

0

你可以看看following example的流媒體數據: 亞馬遜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) }); 
+0

我'm使用文件對象,所以我得到的錯誤「路徑必須是一個字符串」 –