2009-09-30 29 views
6

Actualmente estoy tratando de desarrollar una aplicación para cargar archivos en un cubo de Amazon S3 usando cURL y C++. Después de leer detenidamente la guía de desarrolladores de S3, comencé a implementar mi aplicación usando cURL y formando el encabezado como se describe en la guía Desarrolladores y después de muchas pruebas y errores para determinar la mejor manera de crear la firma S3, ahora estoy frente a un error 501 . El encabezado recibido sugiere que el método que estoy usando no está implementado. No estoy seguro de dónde estoy equivocado, pero aquí está el encabezado HTTP que estoy enviando a Amazon:Subiendo a Amazon S3 usando 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 

he truncado el nombre de depósito, clave de acceso Identificación y Firma por razones de seguridad.

No estoy seguro de lo que estoy haciendo mal, pero creo que el error se está generando debido a los campos de aceptación y transferencia de codificación (no del todo seguro). Entonces, ¿puede alguien decirme lo que estoy haciendo mal o qué estoy recibiendo un 501.

+0

resuelto: faltaba un CURLOPT para el tamaño del archivo en mi código y ahora todo está trabajando perfectamente –

Respuesta

-1

Resuelto: faltaba un CURLOPT para el tamaño del archivo en mi código y ahora todo está funcionando perfectamente

+3

¿Qué opción? ¿Cómo cambiaron los encabezados? –

+0

Nunca entiendo por qué las personas responden con respuestas como "Oh, lo descubrí, pero no voy a decirte lo que hice para resolverlo, aunque pasaste tiempo tratando de ayudarme", elabora tu solución De lo contrario, estás perdiendo el tiempo de las personas. –

3

Se puede ejecutar un archivo bash. Este es un ejemplo upload.sh script que sólo podría funcionar como: 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} 

más en: http://www.jamesransom.net/?p=58

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

+0

Gracias, pero esta pregunta fue de hace cinco años y es para Windows como sugiere la etiqueta. –