2017-01-09 4 views
1

Ist es möglich, eine Anfrage zu senden mit: Content-Type: multipart/form-data an API Gateway?AWS API Gateway: Unterstützung für Formulardaten

In meinem Fall, ich versuche, wie unten über Postman Form-Daten zu senden:

user[email]:[email protected] 
user[password]:password 
user[password_confirmation]:password 
user[username]:testUser 

aber es scheint, dass API-Gateway den Inhalt verliert.

Alles funktioniert gut, wenn ich es so an: application/x-www-form-urlencoded oder application/json.

Antwort

4

Verwenden mulipart/form-data nicht vollständig durch AWS API-Gateway unterstützt werden, vor allem, wenn wir versuchen, Datei über mulipart/form-Daten zu senden.

Um ein Bild zusammen mit anderen Daten aus dem Formular zu senden, wäre es wahrscheinlich die beste Lösung, es als JSON zu senden, wobei das Bild mit base64 codiert ist.

Zum Beispiel, wenn jemand senden möchten:

  1. Benutzername (string)
  2. Avatar (Bild)

Avatar mit Base64 codiert werden soll. Es gibt ein Bild als Text, wie:

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAyA... 

Der Inhalt POST Nachricht wäre:

{ 
    "user_account": { 
      "avatar": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAyA...", 
      "username": "my name" 
    } 
} 

API-Gateway

In-API-Gateway, unter dem API, offen Modelle und erstellen Sie ein neues Modell, zum Beispiel UserAccount:

{ 
    "$schema": "http://json-schema.org/draft-04/schema#", 
    "title": "UserAccountUpdate", 
    "type": "object", 
    "properties": { 
    "user": { 
     "type": "object", 
     "properties": { 
      "avatar": { "type": "string" }, 
      "username": { "type": "string" } 
    } 
    } 
    } 
} 

In Methode anfordern ->HTTP-Request-Header Satz: Content-Type.

In Methode anfordern ->Anfrage Körper Sets: application/json und als Modell Gebrauch erstellt Useraccount Modell.

In Integration Anfrage ->Inhalt Handhabung Satz wie: Pass-Through.

In Integration Anfrage ->Body Mapping-Vorlagen wählen: Wenn keine Vorlage entspricht den reuqest Content-Type-Header. (Sie können hier auch zwei andere Optionen verwenden und zusätzliche Zuordnungsvorlagen festlegen).

Backend

Backend empfängt ein Bild als Text mit Base64-kodiert. Also wahrscheinlich, bevor es weiter verwendet, muss es es von Text zu Bild dekodieren.

Die Kodierung/Dekodierung von Bildern mit base64 ist sehr beliebt, daher sollten Sie in Ihren Frameworks einige geeignete Tools/Bibliotheken finden.

0

Wenn Sie Anfrage mit Content-Type senden: multipart/form-data auf API-Gateway, müssen Sie Ihre ursprünglichen Content-Type-Header auf Ihre Integration Endpunkt passieren.

aws apigateway update-integration \ 
    --rest-api-id a1b2c3d4e5 \ 
    --resource-id a1b2c3 \ 
    --http-method POST \ 
    --patch-operations op='replace',path='/requestParameters/integration.request.header.Content-Type',value='method.request.header.Content-Type'