1

Nach dem Einrichten meiner API zum Hochladen von Dateien, erkannte ich, dass es einen speziellen Fall gibt, wo Sie ein Bild (jpg) hochladen möchten, Sie definiert die binäre Unterstützung bei die API, aber Sie folgende Fehlermeldung erhalten:Wie lade ich ein Bild mit AWS API Gateway Proxy Integration mit S3

The request signature we calculated does not match the signature you 
provided. Check your AWS Secret Access Key and signing method. 
Consult the service documentation for details. 
The Canonical String for this request should have been 
'PUT /test/vi-dummy-bucket/testImg2.jpg 
content-type:application/x-www-form-urlencoded 
host:qhweyos7z2.execute-api.us-west-1.amazonaws.com 
x-amz-date:20170808T154441Z 
x-amz-security-token: // security token string no quotes 
content-type;host;x-amz-date;x-amz-security-token 5fa90f0 ...' 
The String-to-Sign should have been 
'AWS4-HMAC-SHA256\n20170808T154441Z 
20170808/us-west-1/execute-api/aws4_request 
f7a38fa ...' 

das merkwürdige ist, dass einfache Textdateien Hochladen mit dem exakt gleichen API-Aufruf funktioniert, dann nur, was ich ändern muß, ist

Content-Type 'text/plain' 

und Schreibe einen Text in den Rohteil der Anfrage.

Nicht sicher, ob dies ein Inhaltstyp-Problem oder ein Anfragekörper-Problem ist, wenn ich alles im Arbeitsstatus belasse (text/plain & Text im Textkörper) und einfach den Textkörper in binär ändern und das Bild festlegen, Ich bekomme den obigen Fehler.

  • Mein API-Gateway in der US-west-1-Region
  • Mein S3 Eimer ist in us-east-1-Region

Und die Anfrage ich verwende ist:

PUT /test/vi-dummy-bucket/testImg2.jpg HTTP/1.1 
Host: qhwe7z2.execute-api.us-west-1.amazonaws.com 
Content-Type: application/x-www-form-urlencoded 
X-Amz-Security-Token: FQoDYX ... 
X-Amz-Date: 20170808T154441Z 
Authorization: AWS4-HMAC-SHA256 
Credential=ASIAJICO6JFTJWN7A/20170808/us-west-1/execute- 
api/aws4_request, SignedHeaders=content-type;host;x-amz-date;x-amz- 
security-token, 
Signature=6a792 ... Cache-Control: no-cache 
Postman-Token: e9d1f730-f50b-7e27-70cc-c15a138d8cc6 

(Binary Image)

Dies ist eine weitere Version des Antrags (gleicher Fehler):

PUT /test/vi-dummy-bucket/testImg2.jpg HTTP/1.1 
Content-Type: image/jpeg 
x-amz-security-token: FQoDY ... 
x-amz-date: 20170808T190134Z 
Authorization: AWS4-HMAC-SHA256 
Credential=ASIAIZSP5YKVLJ3GVVQA/20170808/us-west-1/execute- 
api/aws4_request, SignedHeaders=content-type;host;x-amz-date;x-amz- 
security-token, 
Signature=b2324 ... 
Host: qhos7z2.execute-api.us-west-1.amazonaws.com 
Connection: close 
User-Agent: Paw/3.1.2 (Macintosh; OS X/10.12.6) GCDHTTPRequest 
Content-Length: 823236 

--- UPDATE ---

Nach dem sigV4 Implementierung manuell sigining das erzeugte SDK verwenden, ist die Signatur nicht mehr ein Problem.

Das einzige Problem ist, dass das generierte SDK nur eine Zeichenfolge als "body" akzeptiert, also muss ich die Datei in eine binäre Zeichenfolge konvertieren. Dann wird es korrekt übergeben und eine Datei in S3 erstellt, aber die Größe ist jetzt doppelt und es ist nicht sichtbar, als ob die Binärzeichenfolge nicht zurück in die Binärdatei konvertiert wurde. So frustrierend ...

BTW, ich habe bereits PASSTHROUGH und CONVERT_TO_BINARY versucht.

Antwort

1

Aktualisiert: Es sieht so aus, als ob dies mit einem bekannten Fehler in Postman zusammenhängen könnte. Als Referenz wird hier ein Zusammenhang mit SO Frage: AWS Signature Error using Postman to access the AWS API Gateway when posting a binary

und hier ist der Bug-Report für Postman: https://github.com/postmanlabs/postman-app-support/issues/3232

Ist die Anfrage Arbeit, wenn Sie einen alternativen Rest Client und/oder ein Befehlszeilenprogramm wie curl oder httpie verwenden ?


Wenn Sie die binäre Unterstützung konfiguriert sollten Sie setzen wahrscheinlich die Content-Type den binären Inhalt passen Sie senden.

Von dem, was Sie Sie senden den binären Inhalt mit Content-Type application/x-www-form-urlencoded aber wenn der Körper würde ich tatsächlich eine binäre jpeg Datei hochgeladen haben, erwarten, dass Sie Content-Type image/jpeg

+0

habe ich versucht, das gleiche mit verschiedenen Content- Senden werden soll Typen, das ist nur der letzte, den ich ausprobiert habe. ^^ – WilliamX

Verwandte Themen