2012-10-27 75 views
5

這是我現在的代碼。我使用express和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 
    }); 
}); 

此相同的代碼工作正常,甚至從cloud9在線編輯器/調試器,只是沒有從Heroku的。我猜這與「ephemeral file system」有關,但這只是一個猜測。但是我可以使用noirweavejester's aws sdk在Clojure上使用s3 pass-thru上傳來在Heroku上工作,所以它在節點中也是可能的。

回答

2

我偶然發現了一個修補程序 - 一旦我將以下內容添加到package.json,它就開始工作。否則,Heroku默認爲0.4。

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