2012-10-27 15 views
5

Oto mój obecny kod. Używam express i knox, i nie sądzę, że robię coś niezwykłego, ale s3.putFile odpowiada 400 kodem statusu, ale błąd zerowy, a plik nie zostanie przesłany.Jak przekazywać pliki do s3 na Heroku przy użyciu pliku 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 
    }); 
}); 

Ten sam kod działa poprawnie nawet z cloud9 edytora online/debugger, tylko nie z Heroku. Zgaduję, że ma to coś wspólnego z "ephemeral file system", ale to tylko przypuszczenie. Jednak udało mi się pobrać s3 pass-thru do pracy na Heroku w Clojure przy użyciu noir i weavejester's aws sdk, więc musi to również być możliwe w węźle.

Odpowiedz

2

Natknąłem się na naprawę - gdy dodałem następującą informację do package.json, zaczęło działać. Heroku domyślnie przyjmuje 0.4.

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