2012-11-10 4 views
9

node3は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と同じディレクトリに2枚の画像を持って、私はに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

私の実装を(それが:)であるとして、あるいは単にそれを維持)。 expressknox,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 /"などのファイルをprependするだけで、s3コンソールにはフォルダのように表示されます。この場合、引数をfile.nameから "foo /" + file.nameに変更すると、トリックが実行されます。 – Liam

関連する問題