2014-11-11 14 views
6

Ho un modulo in cui è possibile caricare un file. Carico il file direttamente con skipper e funziona perfettamente.Caricamento file Sails.js con Skipper per AWS S3

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

Ma voglio ridimensionare e poi caricare il file, in modo da:

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

Quindi, la mia domanda è: come si può caricare il outputBuffer invece di req.file('file')?

+0

hai trovato una soluzione per questo problema? –

risposta

3

Invece di utilizzare skipper-s3 è possibile utilizzare il modulo aws-sdk. Carica l'immagine sul disco (originale), elaborala, caricala e cancella l'originale.

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

In alternativa, alcune librerie (come gm) può prendere un URL remoto. Potresti usare skipper-s3 per caricare, quindi eseguire il processo di cui sopra (dove l'originale è l'URL s3) e funzionerebbe, anche-davvero non è il performante, comunque, comunque.

Problemi correlati