2009-09-30 171 views
6

我目前正在嘗試開發一個應用程序,使用cURL和C++將文件上傳到Amazon S3存儲桶。仔細閱讀S3開發人員指南後,我開始使用cURL實現我的應用程序,並按照開發人員指南的描述形成Header,並且經過大量試驗和錯誤以確定創建S3簽名的最佳方式,我現在面臨501錯誤。收到的標題表明我正在使用的方法未實現。我不知道,我錯了,但這裏要說的是,我發送給亞馬遜的HTTP標頭:使用cURL/libcurl上傳到Amazon S3

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 

我已經截斷了鬥名,訪問密鑰ID和簽名出於安全考慮。

我不知道我在做什麼錯,但我認爲錯誤是由於Accept和Transfer-Encoding Fields(Not Real Sure)而生成的。因此,誰能告訴我什麼,我做錯了,或者爲什麼我得到一個501

+0

解決:失蹤了在我的代碼文件大小的CURLOPT現在一切都完美工作 – 2009-09-30 08:04:17

回答

-1

解決:失蹤了在我的代碼文件大小的CURLOPT,現在一切工作完全

+3

有什麼選擇?標題如何變化? – 2011-10-31 03:46:23

+0

我不明白爲什麼人們會回答這樣的問題:「哦,我明白了,但即使你花時間幫助我解決問題,我也不會告訴你我解決了什麼問題」 ,否則你是在浪費人們的時間。 – 2017-08-07 17:33:39

3

你可以執行一個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

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

+0

謝謝,但這個問題來自五年前,它是標籤建議的Windows。 – 2014-10-08 06:11:42