libzonl网址为亚马逊s3部分上传

时间:2014-05-21 10:52:20

标签: amazon-s3 libcurl multipart

我正在尝试学习libcurl和s3的绳索,将PUT(单个)文件转换为s3我所做的libcurl请求就像

CURLOPT_URL:
http://my_bucket.s3.amazonaws.com/my_file.ppi 

CURLOPT_HTTPHEADER(s):
PUT /my_file.ppi HTTP/1.1
Host: my_bucket.s3.amazonaws.com
Date: date
Authorization: authorization string  

这很好用。对于多部分请求,init上载libcurl请求为

CURLOPT_URL: 
http://my_bucket.s3.amazonaws.com/my_file.ppi?uploads

CURLOPT_HTTPHEADER(s):
POST /myfile.ppi?uploads HTTP/1.1
Host: my_bucket.s3.amazonaws.com
Date: date
Authorization: authorization string
x-amz-content-sha256: STREAMING-AWS4-HMAC-SHA256-PAYLOAD

这是成功的并获得上传ID。然后当做实际的部分上传时,不管url和PUT标题我给s3抛出错误说方法没有实现。

CURLOPT_URL: 
http://my_bucket.s3.amazonaws.com/my_file.ppi?uploads(??)

CURLOPT_HTTPHEADER(s):
PUT /myfile.ppi?partNumber=1&uploadId=qEBsy9IVnBf9Cp3yaQwWq18cm... HTTP/1.1
Host: my_bucket.s3.amazonaws.com
Date: date
Authorization: authorization string   
x-amz-content-sha256: 2ccd1c4....

我在这里做错了什么?我将CURLOPT_UPLOAD设置为1是否还需要设置其他libcurl选项? url和PUT标题应该是什么样的?

提前致谢

1 个答案:

答案 0 :(得分:0)

Amazon S3仍然不支持请求的Chunked Transfer Encoding,因此您必须使用CURLOPT_INFILESIZE_LARGE指定上传对象的大小(然后libcurl将在Content-Length标头中发送)。