2016-04-06 5 views
3

Ich habe eine Lambda-Funktion, die eine Datei von s3 mit dem Eingabeschlüssel im Ereignis abruft und diese an den Client senden muss. Ich verwende die folgende Funktion die Datei von s3AWS Lambda und AWS API Gateway: Wie wird eine Binärdatei gesendet?

function getObject(key){ 
    var params = { 
    Bucket: "my_bucket", 
    Key: key 
    } 
    return new Promise(function (resolve, reject){ 
    s3.getObject(params, function (err, data){ 
     if(err){ 
     reject(err); 
     } 
     resolve(data.Body) 
    }) 
    }) 
} 

zu bekommen Wenn ich die Antwort dieses Versprechen (Puffer) zu context.succeed senden, es als JSON-Array auf Frontend angezeigt wird. Wie kann ich es als Datei senden? Die Dateien können entweder ZIP- oder HTTP-Archivdateien (HAR-Dateien) sein. Die s3-Schlüssel enthalten die entsprechende Erweiterung. Ich vermute, dass es etwas mit der "Integration Response" in API Gateway zu tun hat. Aber nicht in der Lage herauszufinden, wo zu ändern

+0

Lesen Sie die offizielle AWS-Antwort in diesem Thema: https://forums.aws.amazon.com/thread.jspa?threadID=195218 –

+1

API-Gateway-Team - Mark B hat Recht, das ist der offizielle Status. Wir arbeiten daran, in Zukunft Binär Passthrough zu unterstützen, aber keine ETA. –

+0

gibt es eine Problemumgehung dafür. Unsere komplette Anwendung ist Serverless. Wir möchten vermeiden, eine separate EC2-Instanz für den Download-Zweck –

Antwort

4

Gute Nachrichten, können Sie jetzt binäre Eingabe und Ausgabe für API-Gateway (announcement und documentation).

Grundsätzlich ändert sich nichts an Ihrer Lambda-Funktion, aber Sie können jetzt die contentHandling API-Gateway-Integrationseigenschaft auf CONVERT_TO_BINARY setzen.

Leider zeigen die offiziellen AWS-Beispiele nur das HTTP API Gateway-Backend, da die AWS Lambda-Unterstützung noch nicht abgeschlossen ist. Zum Beispiel konnte ich bisher noch nicht gezippten Inhalt von AWS Lambda zurückgeben, obwohl es dank der neuen binären Unterstützung und dem $util.base64Decode() Mapping-Dienstprogramm möglich sein sollte.

+0

Könnten Sie bitte einige Beispiele geben? Ich bin absoluter Anfänger bei AWS und versuche gerade, eine Zip-Datei auf Lambda hochzuladen, und ich würde es auch lokal mit Serverless- und Serverless-Offline-Frameworks machen (zur Entwicklung). – Marecky

Verwandte Themen