2014-05-21 1 views
1

Я пытаюсь научиться веревки Libcurl и s3, чтобы PUT (один) файл в s3 запрос Libcurl я сделать это какLibcurl URL для амазонки s3 закачивания

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 

Это успешное и получает идентификатор загрузки. Затем, когда вы выполняете фактическую загрузку части, независимо от того, какой заголовок 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

Amazon S3 до сих пор не поддерживает Chunked Transfer Encoding по запросу, так что вы должны указать размер загружаемого объекта (который Libcurl будет затем посылает в заголовке Content-Length) с помощью CURLOPT_INFILESIZE_LARGE ,