2014-11-11 21 views
6

Tôi có một biểu mẫu nơi bạn có thể tải lên tệp. Tôi tải lên các tập tin trực tiếp với đội trưởng và nó hoạt động hoàn hảo.Tải lên tệp Sails.js với Skipper gửi tới AWS S3

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

Nhưng tôi muốn thay đổi kích thước đầu tiên và sau đó tải lên các tập tin, vì vậy:

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

Vì vậy, câu hỏi của tôi là: Làm thế nào có thể tải lên các outputBuffer thay vì req.file('file')?

+0

bạn có nhận được giải pháp cho vấn đề này không? –

Trả lời

3

Thay vì sử dụng skipper-s3 bạn có thể sử dụng mô-đun aws-sdk. Tải ảnh lên đĩa (bản gốc), xử lý ảnh, tải lên và xóa ảnh gốc.

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

Hoặc, một số thư viện (như gm) có thể lấy một URL từ xa. Bạn có thể sử dụng skipper-s3 để tải lên, sau đó thực hiện quy trình ở trên (nơi ban đầu là URL s3) và nó cũng sẽ hoạt động - tuy nhiên, thực tế, không phải là performant.

Các vấn đề liên quan