我正在尝试学习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标题应该是什么样的?
提前致谢
答案 0 :(得分:0)
Amazon S3仍然不支持请求的Chunked Transfer Encoding,因此您必须使用CURLOPT_INFILESIZE_LARGE指定上传对象的大小(然后libcurl将在Content-Length标头中发送)。