2016-10-20 3 views
0

Ich arbeite an der API zum Speichern einer vom Benutzer hochgeladenen Datei.NodeJS - Bild Binärdatei lesen

function uploadPhoto(req, res) { 
    var imagedata = new Buffer(''); 

    req.body.on('data', function (chunk) { 
     imagedata = Buffer.concat([imagedata, chunk]); 
    }); 
    req.body.on('end', function (chunk) { 
     fs.writeFile('success.jpeg', imagedata, 'binary', function (err) { 
      if (err) throw err 
      console.log('File saved.') 
     }) 
    }); 
} 

Es gab einen Fehler, wenn ich req.body.on ('Daten') verwendete. Die Daten aus Postbote enter image description here enter image description here

Wenn ich den Wert req.body mit console.log ausdrucken ("Nachricht:" + req.body), war es String und hat einen Wert: enter image description here

ich habe versucht, mithilfe von Buffer wie diese

var writeFile = function (type, cb) { 
    var data = new Buffer(req.body, type); 
    fs.writeFile(type + '.jpeg', data, type, function (err) { 
     cb(null, data.length); 
    }); 
} 
async.parallel([ 
     writeFile.bind(null, 'binary'), 
     writeFile.bind(null, 'utf8'), 
     writeFile.bind(null, 'ascii'), 
     writeFile.bind(null, 'ucs2'), 
     writeFile.bind(null, 'base64') 
    ], function (err, results) { 
     response.status(200).send({}); 
    }) 

dieser Datei zu schreiben, wird einige JPEG-Dateien mit unterschiedlicher Größe erstellen, sondern kann sie als Bild nicht lesen.

Wie kann ich dieses Bild vom Benutzer speichern? Vielen Dank.

Antwort

0

Dies sieht aus wie ein guter Fall für Streams.

function uploadPhoto(req, res) { 
    var file = fs.createWriteStream(__dirname + '/success.jpeg') 
    req.pipe(file).on('error', function(err) { console.log(err) }) 
} 

Header können auch helfen festzustellen, welche Dateityp und Zeichencodierung es hat.

var file = fs.createWriteStream(__dirname + '/success.jpeg', {defaultEncoding: req.headers.encoding || 'utf8'})