2012-11-10 15 views
9

per esempio:nodejs caricando su s3 usando knox?

knox.js:

knox.putFile("local.jpeg", "upload.jpeg", { 
      "Content-Type": "image/jpeg" 
     }, function(err, result) { 
      if (err != null) { 
      return console.log(err); 
      } else { 
      return console.log("Uploaded to amazon S3"); 

Ho due immagini nella stessa directory knox.js, local.jpeg e local2.jpeg, io sono in grado di caricare local.jpeg a s3, ma non local2.jpeg, entrambi i file hanno le stesse autorizzazioni. mi manca qualcosa qui? grazie

risposta

-1

Questo perché il codice non scarica up2.jpeg!

Il codice spinge solo il file denominato local.jpeg. Dovresti, per ogni file, richiamare il metodo knox.put(). Vi consiglio anche di avere qualche funzione di supporto che farà qualche stringa di formattazione per rinominare al file caricato su S3 (o semplicemente tenerlo come è :))

var files = ["local.jpeg", "local1.jpeg"]; 
for (file in files){ 
    var upload_name = "upload_"+ file; // or whatever you want it to be called 

    knox.putFile(file, upload_name, { 
     "Content-Type": "image/jpeg" 
    }, function (err, result) { 
     if (err != null) { 
      return console.log(err); 
     } else { 
      return console.log("Uploaded to amazon S3"); 
     } 
    }); 
} 
12

mia implementazione senza conservare in locale. Con express, knox, mime, fs.

var knox = require('knox').createClient({ 
    key: S3_KEY, 
    secret: S3_SECRET, 
    bucket: S3_BUCKET 
}); 

exports.upload = function uploadToAmazon(req, res, next) { 
    var file = req.files.file; 
    var stream = fs.createReadStream(file.path) 
    var mimetype = mime.lookup(file.path); 
    var req; 

    if (mimetype.localeCompare('image/jpeg') 
     || mimetype.localeCompare('image/pjpeg') 
     || mimetype.localeCompare('image/png') 
     || mimetype.localeCompare('image/gif')) { 

     req = knox.putStream(stream, file.name, 
      { 
       'Content-Type': mimetype, 
       'Cache-Control': 'max-age=604800', 
       'x-amz-acl': 'public-read', 
       'Content-Length': file.size 
      }, 
      function(err, result) { 
       console.log(result); 
      } 
     ); 
     } else { 
     next(new HttpError(HTTPStatus.BAD_REQUEST)) 
     } 

     req.on('response', function(res){ 
      if (res.statusCode == HTTPStatus.OK) { 
       res.json('url: ' + req.url) 
      } else { 
       next(new HttpError(res.statusCode)) 
      } 
}); 
+1

Molto utile! Grazie! – CainaSouza

+0

come specificare le cartelle del bucket s3 –

+0

s3 non ha "cartelle" esattamente. hai appena anteposto il tuo file con "foo/bar /" ecc. e la console s3 lo visualizzerà come se fosse nelle cartelle. In questo caso, cambiare l'argomento in putStream da file.name in "foo /" + file.name farebbe il trucco. – Liam