2012-11-10 144 views
9

例如:nodejs使用knox上傳到s3?

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

我在同一個目錄中knox.js,local.jpeg和local2.jpeg兩個圖像,我能夠上傳local.jpeg到s3,但不是local2.jpeg,這兩個文件具有相同的權限。我錯過了什麼嗎?謝謝

回答

-1

這是因爲你的代碼沒有上傳local2.jpeg!

您的代碼只會推送名爲local.jpeg的文件。對於每個文件,您都應該調用knox.put()方法。我也建議你有一些輔助的功能,將做一些字符串格式化重命名爲上傳的文件上S3(或者只是保持它,因爲它是:))

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

我不落實店的語言環境。用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

非常有用!謝謝! – CainaSouza

+0

如何指定s3存儲桶的文件夾 –

+0

s3完全沒有「文件夾」。你只需在「foo/bar /」等文件前加上你的文件,s3控制檯就會顯示它,就像它在文件夾中一樣。在這種情況下,將參數從file.name更改爲putStream爲「foo /」+ file.name將執行此操作。 – Liam

相關問題