2009-09-30 7 views
6

J'essaie actuellement de développer une application pour télécharger des fichiers dans un compartiment Amazon S3 en utilisant cURL et C++. Après avoir lu attentivement le guide des développeurs S3 j'ai commencé à implémenter mon application en utilisant cURL et en formant l'en-tête comme décrit dans le guide des développeurs et après beaucoup d'essais et d'erreurs pour déterminer la meilleure façon de créer la signature S3 . L'en-tête reçu suggère que la méthode que j'utilise n'est pas implémentée. Je ne sais pas où je me trompe, mais voici l'en-tête HTTP que je vous envoie à amazon:Téléchargement vers Amazon S3 en utilisant 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 

Je tronqué le nom Bucket, accès ID clé et de signature pour des raisons de sécurité.

Je ne suis pas sûr de ce que je fais mal mais je pense que l'erreur est générée en raison des champs Accept et Transfer-Encoding (pas vraiment sûr). Alors quelqu'un peut me dire ce que je fais mal ou pourquoi je reçois un 501.

+0

Résolu: il manquait un CURLOPT pour la taille du fichier dans mon code et maintenant tout est fonctionne parfaitement –

Répondre

-1

Résolu: il manquait un CURLOPT pour la taille du fichier dans mon code et maintenant tout fonctionne parfaitement

+3

Quelle option? Comment les en-têtes ont-ils changé? –

+0

Je ne comprends jamais pourquoi les gens répondent avec des réponses du type "Oh, je l'ai compris, mais je ne vais pas vous dire ce que j'ai fait pour le résoudre même si vous avez essayé de m'aider". , sinon vous perdez le temps des gens. –

3

Vous pouvez exécuter un fichier bash. Voici un exemple de script upload.sh que vous pourriez courir comme: 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} 

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

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

+0

Merci, mais cette question était d'il y a cinq ans et c'est pour Windows comme le suggère l'étiquette. –

Questions connexes