2009-09-30 13 views
6

Ich versuche derzeit, eine Anwendung zum Hochladen von Dateien in einen Amazon S3-Bucket mit cURL und C++ zu entwickeln. Nach sorgfältiger Lektüre des S3-Entwicklerleitfadens habe ich begonnen, meine Anwendung mit cURL zu implementieren und den Header zu bilden, wie im Entwicklerleitfaden beschrieben, und nach vielen Versuchen und Fehlern, um den besten Weg zur Erstellung der S3-Signatur zu bestimmen, stehe ich nun vor einem 501-Fehler . Der empfangene Header weist darauf hin, dass die von mir verwendete Methode nicht implementiert ist. Ich bin nicht sicher, wo ich falsch bin, aber hier ist der HTTP-Header, die ich auf amazon bin das Senden:Hochladen auf Amazon S3 mit cURL/libcurl

PUT /test1.txt HTTP/1.1 
Accept: */* 
Transfer-Encoding: chunked 
Content-Type: text/plain 
Content-Length: 29 
Host: [BucketName].s3.amazonaws.com 
Date: [Date] 
Authorization: AWS [Access Key ID]:[Signature] 
Expect: 100-continue 

ich den Bucket-Name, Zugriffsschlüssel-ID und Unterschrift aus Sicherheitsgründen abgeschnitten haben.

Ich bin mir nicht sicher, was ich falsch mache, aber ich denke, dass der Fehler wegen der Felder Accept und Transfer-Encoding (nicht wirklich sicher) generiert wird. Also kann mir jemand sagen, was ich falsch mache oder warum ich bin immer ein 501.

+0

Gelöst: fehlte eine CURLOPT für die Dateigröße in meinem Code und jetzt ist alles perfekt funktioniert –

Antwort

-1

Gelöst: fehlte eine CURLOPT für die Dateigröße in meinem Code und jetzt alles funktioniert perfekt

+3

Welche Option? Wie haben sich die Header geändert? –

+0

Ich verstehe nie, warum Menschen mit Antworten antworten wie "Oh, ich habe es herausgefunden, aber ich werde dir nicht sagen, was ich getan habe, um es zu lösen, obwohl du Zeit damit verbracht hast, mir zu helfen" sonst verschwendest du die Zeit der Völker. –

3

Sie könnten ausführen eine Bash-Datei. Hier ist ein Beispiel upload.sh Skript, das Sie gerade als laufen konnte: sh upload.sh yourfile

#!/bin/bash 
file=$1 
bucket=YOUR_BUCKET 
resource="/${bucket}/${file}" 
contentType="application/x-itunes-ipa" 
dateValue=`date -R` 
stringToSign="PUT\n\n${contentType}\n${dateValue}\n${resource}" 
s3Key=YOUR_KEY_HERE 
s3Secret=YOUR_SECRET 
echo "SENDING TO S3" 
signature=`echo -en ${stringToSign} | openssl sha1 -hmac ${s3Secret} -binary | base64` 
curl -vv -X PUT -T "${file}" \ 
-H "Host: ${bucket}.s3.amazonaws.com" \ 
-H "Date: ${dateValue}" \ 
-H "Content-Type: ${contentType}" \ 
-H "Authorization: AWS ${s3Key}:${signature}" \ 
https://${bucket}.s3.amazonaws.com/${file} 

mehr auf: http://www.jamesransom.net/?p=58

http://www.jamesransom.net/?p=58

+0

Danke, aber diese Frage war vor fünf Jahren und es ist für Windows, wie das Tag suggeriert. –

Verwandte Themen