2017-02-07 10 views
0

FormData 객체로 래핑 된 이미지를 노드 서버로 전송하는 각도 2 애플리케이션이 있습니다.FormData to Node Server 다음 S3로

내가 서버에서 이미지를 받아 파일에 기록 할 수 있습니다

는 다음을 다시 다운로드 :

var busboy = new Busboy({ headers: req.headers }); 
busboy.on('file', function(fieldname, file, filename, encoding, mimetype) { 


    if(mimetype == "image/png"){ 
     var saveTo = path.join('/home/ec2-user/bonappetite/tmp', path.basename(filename) + ".png"); 
    } else if(mimetype == "image/jpeg") { 
     var saveTo = path.join('/home/ec2-user/bonappetite/tmp', path.basename(filename) + ".jpg"); 
    } else { 
     var saveTo = path.join('/home/ec2-user/bonappetite/tmp', path.basename(filename)); 
     } 
     file.pipe(fs.createWriteStream(saveTo)); 

}); 

busboy.on('finish', function() { 
    console.log("url retrieved"); 
    res.writeHead(200, { 'Connection': 'close' }); 
    res.end(savedUrl); 
}); 
return req.pipe(busboy); 

는 내가 뭘하려고하면 FormData 내부의 이미지를 촬영하고 내 S3 버킷에 업로드입니다 . 나는 데이터 나 자신을 업로드 할 수 있어요,하지만 난

var AWS = require('aws-sdk'); 
AWS.config.loadFromPath('./aws_config.json'); 
var s3Bucket = new AWS.S3({ params: {Bucket: 'xxxx'} }); 



params = {Key: filename, Body: file}; 
s3Bucket.putObject(params, function(err, data) { 

if (err) { 

    console.log(err) 

} else { 
    var urlParams = {Bucket: 'xxxx', Key: filename}; 
    s3Bucket.getSignedUrl('getObject', urlParams, function(err, url){ 
      if(err){ 
       console.log(err); 
       res.status(err.status || 500); 
       res.send(error); 
      }else { 
       res.setHeader('Content-Type', 'application/json'); 
       url = url; 
       res.send({"url":url}); 
      } 
    }) 

} 
}); 

어떻게 난 그냥 내 서버에 업로드 한 파일을 가지고 S3에 스트리밍 할 수 있습니다 POST 요청에서 저장 한 이미지를 업로드하는 것 캔트 ?

s3으로 보내기 전에 파일을 디스크에 저장해야합니까?

감사합니다.

답변

0

발견 됨 파일을 저장하지 않고도이 문제를 해결할 수 있습니다.

putObject를 사용하는 대신 upload를 사용하십시오.

var AWS = require('aws-sdk'); 
AWS.config.loadFromPath('./aws_config.json'); 
var s3Bucket = new AWS.S3({ params: {Bucket: 'xxxx'} }); 



params = {Key: filename, Body: file}; 
s3Bucket.upload(params, function(err, data) { 

if (err) { 

    console.log(err) 

} else { 
    var urlParams = {Bucket: 'xxxx', Key: filename}; 
    s3Bucket.getSignedUrl('getObject', urlParams, function(err, url){ 
      if(err){ 
       console.log(err); 
       res.status(err.status || 500); 
       res.send(error); 
      }else { 
       res.setHeader('Content-Type', 'application/json'); 
       url = url; 
       res.send({"url":url}); 
      } 
    }) 

} 
});