API Gateway - Senden Sie mehrteilige \ Formulardaten

9

Scheint meine Frage vielleicht ein bisschen ähnlich zu diesem .

Ich habe eine API innerhalb meines API-Gateways und führe einen HTTP-Proxy durch bis zu einem Endpunkt, der die multipart / form-data-Dateien von POST enthält.

Wenn ich den HTTP-Endpunkt direkt (nicht über das API-Gateway) aufruft - mit postman funktioniert es wie erwartet, jedoch schlägt die Verwendung des API-Gateway-Endpunkts (über Postman) fehl.

Ich habe beide Anfragen (über Fiddler- und CloudWatch-Protokolle) verglichen, die identisch zu sein scheinen:

Anfrage für direkten API-Aufruf (arbeiten):

%Vor%

Anfrage vom API-Gateway (funktioniert nicht):

%Vor%

Ich habe ein paar Dinge von der Gateway-Seite versucht, einschließlich der Änderung der Integration Request , um einen neuen Körper für den gleichen Inhaltstyp zuzuordnen, kein Glück.

Soweit mir bekannt ist, sollte ich nur diesen Aufruf aufrufen können, weshalb es etwas verwirrend wird - es sollte keine Datenmanipulation / -abfangung nötig sein?

Der Fehler, den ich bekomme ist 400 - schlechte Anfrage (beschweren sich über die passthrough nicht gefunden), aber wie Sie in der Anfrage sehen können, ist es da.

Irgendwelche Ideen?

BEARBEITEN Loggt von CloudWatch auf dem gleichen APIGateway POST

Fehler ist immer noch 400 - keine Datei gefunden

    
Hexie 20.01.2017, 04:35
quelle

1 Antwort

6

API Gateway unterstützt derzeit keine mehrteiligen Formulardaten. Dies wird für die zukünftige Entwicklung in Betracht gezogen. In der Zwischenzeit müssen Sie Ihren Client ändern, um mehrere Anfragen oder eine einzelne einteilige Anfrage zu verwenden.

Aktualisieren : Das API-Gateway unterstützt nun binäre Nutzdaten. Definieren Sie einfach "multipart / form-data" als binären Medientyp für Ihre API und leiten Sie die Payload direkt an eine Lambda-Funktion weiter. Von dort können Sie den Körper analysieren, um Ihren Dateiinhalt zu erhalten. Es sollte Bibliotheken geben, die helfen, den mehrteiligen Text zu parsen ('parse-multipart' in NodeJS zum Beispiel).

    
RyanG-AWS 20.01.2017, 19:03
quelle