2014-11-11 5 views
6

파일을 업로드 할 수있는 양식이 있습니다. 나는 선장과 파일을 직접 업로드하고 완벽하게 작동합니다. 그래서Sails.js AWS S3에 스키퍼로 파일 업로드

req.file('file').upload({ 
    adapter: require('skipper-s3'), 
    key: 'key', 
    secret: 'secret', 
    bucket: 'bucketname' 
}, function (err, uploadedFiles) { 
    if (err){ 
     // ko 
    } 
    else{ 
     // ok 
    } 
}); 

하지만 파일을 먼저 크기를 조정 한 후 업로드하려는 :

sharp(original).resize(800).quality(90).toBuffer(function(err, outputBuffer) { 
    if (err) { 
     // ko 
    } 
    // ok 
    outputBuffer; 
}); 

그래서, 내 질문은 : 어떻게 outputBuffer 대신 req.file('file')의를 업로드 할 수 있습니까?

+0

이 문제에 대한 해결책을 얻었습니까? –

답변

3

skipper-s3을 사용하는 대신 aws-sdk 모듈을 사용할 수 있습니다. 이미지를 디스크 (원본)에 업로드하고, 처리하고, 업로드하고, 원본을 삭제합니다.

var AWS = require('aws-sdk'), 
    fs = require('fs'); 

sharp(original).resize(800).quality(90).toBuffer(function(err, outputBuffer) { 
    if (err) { 
     ... 
    } else { 
     new AWS.S3({ 
      accessKeyId: 'your access key', 
      secretAccessKey: 'your secret', 
      params : { 
       Bucket : 'your bucket', 
       Key: 'desired filename' 
      } 
     }); 

     s3client.upload({ACL:'public-read', Body: outputBuffer}, function(err, result) { 
      if(err) { 
       //handle error 
      } else { 
       // continue, handle returned data 
       fs.unlinkSync(original); // delete original 
      } 
     }); 
    } 
}); 

또는 일부 라이브러리 (예 : gm)는 원격 URL을 사용할 수 있습니다. skipper-s3을 사용하여 업로드 한 다음 위의 프로세스를 수행 할 수 있습니다 (원본은 s3 URL 임). 작동하려면 이 아닌 performant를 사용하십시오.

관련 문제