2012-10-27 32 views
5

Đây là mã hiện tại của tôi. Tôi đang sử dụng express và knox, và tôi không nghĩ mình đang làm gì bất thường, nhưng s3.putFile đang phản hồi 400 mã trạng thái nhưng lỗi null và tệp không được tải lên.Làm thế nào để thực hiện việc tải lên thông qua s3 trên Heroku với node.js?

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

Mã này cùng hoạt động tốt thậm chí từ cloud9 biên tập trực tuyến/debugger, chỉ cần không phải từ Heroku. Tôi đoán nó có một cái gì đó để làm với "ephemeral file system", nhưng đó chỉ là một đoán. Tuy nhiên tôi đã có thể nhận được tải lên s3 pass-thru để làm việc trên Heroku ở Clojure bằng cách sử dụng noirweavejester's aws sdk, do đó, nó phải có thể trong nút là tốt.

Trả lời

2

Tôi tình cờ gặp sự cố - một khi tôi đã thêm phần sau vào package.json, nó bắt đầu hoạt động. Heroku mặc định là 0,4.

"engines": { 
    "node": "0.8.x" 
} 
Các vấn đề liên quan