2012-11-10 28 views
9

na przykład:nodejs ładowanie do s3 przy użyciu 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"); 

Mam dwóch obrazów w tym samym katalogu co knox.js, local.jpeg i local2.jpeg, jestem w stanie przesłać do local.jpeg s3, ale nie local2.jpeg, oba pliki mają te same uprawnienia. czy tu czegoś brakuje? dzięki

Odpowiedz

-1

To dlatego, że twój kod nie aktualizuje local2.jpeg!

Twój kod popchnie tylko plik o nazwie local.jpeg. Powinieneś, dla każdego pliku, wywołać metodę knox.put(). Ja również radzę mieć jakąś funkcję pomocnika, który zrobi jakiś ciąg formatowania do zmiany nazwy do przesłanego pliku na s3 (lub po prostu trzymać go jak to jest :))

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

Moje wykonanie bez sklepu w locale. Z express, knox,, , .

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

Bardzo przydatne! Dzięki! – CainaSouza

+0

sposób określania folderów s3 bucket –

+0

s3 nie ma dokładnie "folderów". po prostu dodajesz plik "foo/bar /" itp., a konsola s3 wyświetli to tak, jak gdyby znajdowała się w folderach. W tym przypadku zmiana argumentu putStream z file.name na "foo /" + file.name może załatwić sprawę. – Liam

Powiązane problemy