2014-11-11 16 views
6

Dosya yükleyebileceğiniz bir formum var. Dosyayı doğrudan kaptan ile yükledim ve mükemmel çalışıyor. böyleceSails.js Dosya yükleme ile Skipper ile AWS S3

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

Ama dosyayı ilk boyutlandırmak ve ardından yüklemek istediğiniz,:

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

Yani, benim sorum edilir: Nasıl outputBuffer yerine req.file('file') ait yükleyebilirsiniz?

+0

Bu sorun için çözüm aldınız mı? –

cevap

3

skipper-s3 kullanmak yerine aws-sdk modülünü kullanabilirsiniz. Resmi diske (orijinal) yükleyin, işleyin, yükleyin ve orijinali silin.

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

Alternatif olarak, bazı kütüphaneler (gibi gm) uzak bir URL alabilir. Yükleme yapmak için skipper-s3'ü kullanabilir, daha sonra yukarıdaki işlemi gerçekleştirir (orijinalin s3 URL'sidir) ve yine de işe yarayacaktı - gerçekten de değil performansı.