/ / Das AWS Ruby SDK gibt den Fehler "Der von Ihnen angegebene Content-MD5 war ungültig." Aus, wenn ich versuche, einen Upload mit einer vorgegebenen URL durchzuführen - Ruby-on-Rails, Ruby, Amazon-Web-Services, Amazon-S3

Das AWS Ruby SDK gibt mir einen "Der Content-MD5, den Sie angegeben haben, war ungültig." Fehler, wenn ich versuche, mit einer vordefinierten URL hochladen - Ruby-on-Rails, Ruby, Amazon-Web-Services, Amazon-S3

Ich habe Probleme mit dem AWS Ruby SDK, um einen vorsignierten Upload-Link zu S3 zu erstellen, während ein MD5-Hash angegeben wird.

md5 -q my_file.jpg
4ef248082efb309d50f1cbbbd3d7cf4a

Von der Rails-Konsole:

AWS::S3.new.buckets[bucket].objects[key].url_for(:put, signature_version: :v4, content_md5: "4ef248082efb309d50f1cbbbd3d7cf4a").to_s
=> "https://s3.amazonaws.com/<rest_of_url_here>&X-Amz-SignedHeaders=Host%3BContent-MD5"

Von der Kommandozeile:

curl -v -H "content-md5:4ef248082efb309d50f1cbbbd3d7cf4a" -T my_file.jpg "https://s3.amazonaws.com/<rest_of_url_here>&X-Amz-SignedHeaders=Host%3BContent-MD5"

<Error><Code>InvalidDigest</Code><Message>The Content-MD5 you specified was invalid.</Message>    <RequestId>blah</RequestId><Content-MD5>4ef248082efb309d50f1cbbbd3d7cf4a</Content-MD5><HostId>blah</HostId></Error>

Ich kann einen Upload-Link erstellen und hochladen, ohne content-md5 zu verwenden. Nach dem Upload habe ich überprüft, ob das S3-Objekt tatsächlich denselben MD5-Hash wie meine lokale Datei hat.

Antworten:

7 für die Antwort № 1

Anscheinend brauchst du das MD5 Base64 codiert. Beachten Sie, dass es sich nicht um die MD5-Hex-Zeichenfolge handelt, sondern um die tatsächliche MD5, die codiert werden muss. Ich hätte den folgenden Wert verwenden sollen:

openssl dgst -md5 -binary my_file.jpg | openssl enc -base64
TvJICC77MJ1Q8cu709fPSg==