2012-10-27 2 views
5

다음은 현재 코드입니다. 나는 익스프레스와 녹스를 사용하고 있는데, 나는 이상한 일을하고 있다고 생각하지 않지만, s3.putFile은 400 상태 코드를 응답하지만 null 오류이며 파일이 업로드되지 않습니다.node.js를 사용하여 Heroku의 s3에 pass-thru 업로드를 수행하는 방법은 무엇입니까?

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 패스 스루 업로드를 noirweavejester's aws sdk을 사용하여 얻을 수 있었으므로 노드에서도 가능해야합니다.

답변

2

나는 한 번 픽스를 발견 한 후 다음을 package.json에 추가하면 작업이 시작되었습니다. Heroku의 기본값은 0.4입니다.

"engines": { 
    "node": "0.8.x" 
} 
관련 문제