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.
habe ich versucht, das gleiche mit verschiedenen Content- Senden werden soll Typen, das ist nur der letzte, den ich ausprobiert habe. ^^ – WilliamX