2016-10-20 4 views
0

사용자가 업로드 한 파일을 저장하기위한 API를 작업 중입니다.NodeJS - 이미지 이진 파일 읽기

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

req.body.on ('data')을 사용하면 오류가 발생합니다. I는 CONSOLE.LOG으로 ("메시지"+ req.body)를 req.body의 값을 출력 배달부 enter image description here enter image description here

로부터의 데이터는, 그 문자열 값이고 가지고 enter image description here

나는 다른 크기와 일부 JPEG 파일을 만듭니다이

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

이 같은 버퍼를 사용하여 파일에 쓸 시도했지만 이미지로 읽을 수 없습니다.

어떻게 사용자가이 이미지를 저장할 수 있습니까? 대단히 감사합니다.

답변

0

스트림의 경우에 적합합니다.

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

헤더는 또한 파일 유형 및 문자 인코딩을 결정하는 데 도움이 될 수 있습니다.

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