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.