2012-11-10 9 views
9

zum Beispiel:nodejs mit knox auf s3 hochladen?

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

ich zwei Bilder im selben Verzeichnis wie knox.js, local.jpeg und local2.jpeg habe, bin ich in der Lage local.jpeg hochladen s3, aber nicht local2.jpeg, beide Dateien haben die gleichen Berechtigungen. vermisse ich hier etwas? Danke

Antwort

-1

Das liegt daran, dass Ihr Code local2.jpeg nicht uploadet!

Ihr Code wird nur die Datei mit dem Namen local.jpeg. Sie sollten für jede Datei die Methode knox.put() aufrufen. Ich rate Ihnen auch einige Helferfunktion zu haben, die eine Schnur tun Formatierung auf hochgeladene Datei auf s3 umbenennen (oder halten Sie es so wie es ist :))

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

Meine Implementierung ohne Speicher in locale. Mit 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

Sehr nützlich! Vielen Dank! – CainaSouza

+0

wie Ordner von S3 Eimer angeben –

+0

s3 hat nicht "Ordner" genau. Sie geben Ihre Datei einfach mit "foo/bar /" usw. an und die s3-Konsole zeigt dies an, als ob sie in Ordnern wäre. In diesem Fall würde das Ändern des Arguments in putStream von file.name zu "foo /" + file.name ausreichen. – Liam

Verwandte Themen