Mit dem aws-sdk
Modul und Express 4.13, ist es möglich, eine Datei von S3 eine Reihe von Möglichkeiten zu Proxy.Streaming-Datei von S3 mit Express einschließlich Informationen über Länge und Dateityp
wird diese Callback-Version der Datei Körper als Puffer sowie weitere relevante Header wie Content-Length
zurück:
function(req,res){
var s3 = new AWS.S3();
s3.getObject({Bucket: myBucket, Key: myFile},function(err,data){
if (err) {
return res.status(500).send("Error!");
}
// Headers
res.set("Content-Length",data.ContentLength)
.set("Content-Type",data.ContentType);
res.send(data.Body); // data.Body is a buffer
});
}
Das Problem bei dieser Version ist, dass Sie die gesamte Datei zu erhalten, bevor das Senden, das ist nicht großartig, vor allem wenn es sich um ein großes Video handelt.
Diese Version wird die Datei direkt streamen:
function(req,res){
var s3 = new AWS.S3();
s3.getObject({Bucket: myBucket, Key: myFile})
.createReadStream()
.pipe(res);
}
Aber im Gegensatz zu den ersten, es wird nichts über die Header tun, die ein Browser richtig benötigen könnten, um die Datei zu bearbeiten.
Gibt es eine Möglichkeit, das Beste aus beiden Welten zu erhalten, indem Sie die richtigen Header von S3 übergeben, aber die Datei als Stream senden? Es könnte gemacht werden, indem zuerst eine HEAD
Anfrage an S3 gestellt wird, um die Metadaten zu erhalten, aber kann es mit einem API-Aufruf gemacht werden?
Das ist ausgezeichnet. Vielen Dank! – matthoiland
Sie bevorzugen also zwei HTTP-Anfragen statt einer? –