2016-05-25 14 views
1

Ich versuche, Bilder für die Verarbeitung in eine Lambda-Funktion hochladen zu lassen. Verwenden der Gateway-API-Schnittstelle.Bild mit Hilfe der Gateway-API zu Lambda hochladen

Ich habe versucht, ein Modell für meine POST-Methode zu spezifizieren, aber bisher halte ich den Fehler bekommen

Ungültige Modell angegeben: Validierung Ergebnis: Warnungen: [], Fehler: [Invalid Modellschema angegeben]

... Nicht so hilfreich.

Ich verstehe, dass ich Rohdaten nicht direkt an Lambda senden kann und eine Art von Formatierung dazwischen verwenden muss.

Was ich verstanden habe, ist, dass ich die Gateway-Schnittstelle Base64 die Daten für mich verschlüsseln könnte.

Ich habe versucht, so zu tun, indem Sie das folgende Modellschema mit dem Inhaltstyp image/jpeg

{ 
    "body" : $util.base64Encode($input.body) 
} 

Wie mit dem Bild schicken?

+1

Eine bessere Lösung hochgeladen haben werden die Bilder in S3 laden und sie dann bearbeiten mit Lambda. http://stackoverflow.com/questions/31645205/how-to-upload-file-to-lambda-function-or-api-gateway –

+2

Es scheint entweder mit s3 oder Ausführen von Base64 vor dem Hochladen erforderlich ist. Base64 verbraucht mehr Bandbreite und s3 zwingt uns, zusätzliche Anfragen zu stellen ... – Antzi

+0

Das Umbrechen von '$ util.base64Encode ($ input.body)' in Anführungszeichen löst das Problem: '" body ":" $ util.base64Encode ($ input. Körper) ". Die codierten Daten sind jedoch beschädigt und nutzlos. – advncd

Antwort

2

Es gibt keine systemeigene Unterstützung in API Gateway für Binärdaten, wie Sie gesehen haben. Wir arbeiten daran, aber ich habe keine ETA für Sie. Einige Kunden hatten Erfolg base64 Codierung der Daten wie Sie in Ihrer Frage haben, nur sollte es in einer Mapping-Vorlage in der Integrationsanfrage nicht die Methode Request sein.

Wenn Sie den Inhaltstyp auf image/jpeg festlegen, wird die Codierung nur angewendet, wenn der Content-Type-Header der eingehenden Anfrage auch image/jpeg ist. Stellen Sie also sicher, dass Sie dies festlegen.

Sie können auch eingehende Anfragen an den Verfahren ablehnen, die durch Einstellen der ‚Anfrage Körper Pass-Through‘ (passthroughBehavior in der API) auf den empfohlenen Wert nicht senden das richtige Content Type tun ("wenn es keine Vorlagen sind definiert "oder 'WHEN_NO_TEMPLATES' in der API)

Docs für die Pass-Through-Verhalten ->https://docs.aws.amazon.com/apigateway/api-reference/resource/integration/#passthroughBehavior

+0

Ich konnte png-Bild base64 kodieren und es an Lambda senden. Lambda dekodiert es dann und speichert das Bild irgendwo in s3. Aber dieses Bild ist korrupt. Mit anderen Worten funktioniert 'base64Encode' nicht korrekt für Binärdaten. Ich bin mir nicht sicher, wie einige Ihrer Kunden Erfolg hatten. Base64 verschlüsselt die Daten ... – advncd

1

Da es wie das arbeiten mit binären Daten scheint und API-Gateway ist kompliziert, ich glaube, Sie sollten:

  1. das Bild hochladen API Gateway as an S3 proxy
  2. Legen Sie einen Trigger für die Lambda-Funktion auf PUT für den Eimer mit dem Sie das Bild würde