2016-05-13 16 views
0

Ich verwende Sailsjs 0.12.1, node.js 4.2.6S3-Datei-Upload-Datei-Objekt mit Knoten js

Ich mag die Datei von Front-End (Angularjs) über eine API zum Hochladen und von Backend Ich möchte die Datei in den AWS S3-Bucket hochladen.

Front-End Ich sende die Datei an die API. Ich erhalte die Datei im Backend mit dem Namen, aber während die Datei auf S3 hochladen Ich erhalte den Fehler

Cannot determine length of [object Object]

ich den Fehler google und fand die viele Links, aber mein Pech.

Back-end

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.

Ich möchte wissen, wie das Dateiobjekt verwenden, um die Datei zu laden.
Ich kann lesen Stream erstellen, aber ich habe nicht den Dateipfad Wenn ich die Datei-Objekt erstellen bin ich den Fehler bekommen: Pfad muss ein String sein

+1

@Setzen seine nicht nur duplizieren - die Frage ist hier „wie man hochladen, wenn Sie wissen, die Größe der Datei nicht“ -Technik ist ein bisschen anders und Sie müssen einen Stream erstellen –

+0

@Set dies ist eine andere Frage Ich möchte die Datei mit Dateiobjekt –

Antwort

0

Sie bei following example über Streaming-Daten aussehen könnte: Amazon S3: eine beliebig dimensioniert Strom hochladen (Upload)

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

I hochladen benutze das Dateiobjekt, so bekomme ich den Fehler "Pfad muss eine Zeichenfolge sein" –