2012-10-27 12 views
5

ここに私の現在のコードがあります。私は急行とknoxを使用していますが、私は何か異常なことはしていないと思っていますが、s3.putFileは400のステータスコードに応答していますが、ヌルエラーであり、ファイルはアップロードされません。node.jsを使ってHerokuのs3にパススルーアップロードを行うにはどうすればいいですか?

var express = require('express'); 
var knox = require('knox'); 

var app = express(); 
app.use(express.bodyParser()); 

var s3 = knox.createClient({ 
    key: process.env.AWS_ACCESS_KEY_ID, 
    secret: process.env.AWS_SECRET_ACCESS_KEY, 
    bucket: process.env.S3_BUCKET_NAME 
}); 

app.post('/upload', function(req, res, next) { 
    var photo = req.files.photo; 
    var s3Headers = { 
     'Content-Type': photo.type, 
     'x-amz-acl': 'public-read' 
    }; 

    s3.putFile(photo.path, photo.name, s3Headers, function(err, s3response){ 
     //handle, respond 
    }); 
}); 

この同じコードがちょうどないHerokuのから、でもcloud9オンラインエディタ/デバッガから正常に動作します。私はそれが "ephemeral file system"と関係があると推測していますが、それはちょうど推測です。しかし、私はClojureのHerokuでs3 pass-thruアップロードをnoirweavejester's aws sdkを使って得ることができたので、ノードでも可能でなければなりません。

答えて

2

私は偶然につまずいて、次のものをpackage.jsonに追加しました。 Herokuのデフォルト値は0.4です。

"engines": { 
    "node": "0.8.x" 
}