2012-11-10 12 views
9

:nodejs knox kullanarak s3'e yükleniyor? örneğin

knox.js: Ben knox.js, local.jpeg ve local2.jpeg aynı dizinde iki resimlere sahip

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

i için local.jpeg yüklemek mümkün duyuyorum s3, ancak local2.jpeg değil, her iki dosya da aynı izinlere sahiptir. Burada bir şey eksik miyim? teşekkürler

cevap

-1

Çünkü kodunuz local2.jpeg'yi yükseltmiyor!

Siz kod yalnızca local.jpeg isimli dosyayı iter. Her dosya için, knox.put() yöntemini çağırmalısınız. Ben de s3 yüklendiği dosyaya yeniden adlandırmak için biçimlendirme birkaç ip yapacak bazı yardımcı fonksiyonu var olması gerektiği belirtilir yerdeki mağazada olmadan

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

Benim uygulanmasını (o :) olduğu gibi ya da sadece tutmak). express, knox, mime, fs ile.

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

Çok faydalı! Teşekkürler! – CainaSouza

+0

s3 kepçe –

+0

s3 klasörlerinin nasıl belirtileceği "klasörleri" tam olarak değil. Dosyanızı sadece "foo/bar /" vb. ile hazırlarsınız ve s3 konsolu klasörlerde olduğu gibi gösterecektir. Bu durumda putStream argümanının file.name'den "foo /" + file.name 'ye değiştirilmesi hile yapar. – Liam