2012-10-27 11 views
5

Ecco il mio codice corrente. Sto usando express e knox, e non penso di fare nulla di insolito, ma s3.putFile sta rispondendo a 400 codice di stato ma errore nullo, e il file non viene caricato.Come eseguire i caricamenti pass-through su s3 su Heroku con 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 
    }); 
}); 

Questo stesso codice funziona bene anche dal cloud9 editor di linea/debugger, non solo da Heroku. Immagino che abbia qualcosa a che fare con lo "ephemeral file system", ma è solo una supposizione. Tuttavia sono stato in grado di ottenere upload pass-through s3 per lavorare su Heroku in Clojure usando noir e weavejester's aws sdk, quindi deve essere possibile anche nel nodo.

risposta

2

Mi sono imbattuto in una correzione, dopo aver aggiunto quanto segue a package.json, ha iniziato a funzionare. Il valore predefinito di Heroku è 0,4 altrimenti.

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