我目前正在尝试开发一个应用程序,使用cURL和c ++将file upload到Amazon S3存储桶。 仔细阅读S3开发人员指南后,我开始使用cURL实现我的应用程序,并按照开发人员指南的描述形成Header,经过大量的试验和错误以确定创buildS3签名的最佳方式,我现在面临501错误。 收到的标题表明,我正在使用的方法没有实现。 我不知道我在哪里错了,但这是我发送到亚马逊的HTTP标头:
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
为了安全起见,我截断了Bucket Name,Access Key ID和Signature。
我不知道我在做什么错,但我认为错误是由于接受和转移编码字段(不是真的)。 所以谁能告诉我我做错了什么或为什么我得到一个501。
你可以执行一个bash文件。 这里是一个示例upload.sh
脚本,你可以运行如下: 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}
更多: http : //www.jamesransom.net/?p=58
解决:在我的代码中缺少一个CURLOPT文件的大小,现在一切正常工作