2015-07-23 4 views
3

Я пытаюсь загрузить файл в поле с помощью curl, я могу создавать и просматривать папки, но не загружать файл.Загрузка файлов в BOX с использованием v2 API

Согласно документации завиток запрос:

curl https://upload.box.com/api/2.0/files/content \ 
-H "Authorization: Bearer ACCESS_TOKEN" -X POST \ 
-F attributes='{"name":"tigers.jpeg", "parent":{"id":"11446498"}}' \ 
-F [email protected] 

Я использую этот метод:

public function put_file($filename, $name, $parent_id) { 
$url = $this->upload_url . '/files/content'; 

$attributes = array('name' => $name, 'parent' => array('id' => $parent_id)); 
$params = array('attributes' => json_encode($attributes), 'file' => "@".realpath($filename)); 
$headers = array("Authorization: Bearer ".$this->access_token); 

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
curl_setopt($ch, CURLOPT_POST, true); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $params); 
$response = curl_exec($ch); 
curl_close($ch); 

return json_decode($response, true); 
} 

Ответ я вернусь есть:

Array 
(
[url] => https://upload.box.com/api/2.0/files/content 
[content_type] => text/html;charset=UTF-8 
[http_code] => 400 
[header_size] => 243 
[request_size] => 228 
[filetime] => -1 
[ssl_verify_result] => 0 
[redirect_count] => 0 
[total_time] => 1.616644 
[namelookup_time] => 0.004139 
[connect_time] => 0.151089 
[pretransfer_time] => 0.465782 
[size_upload] => 331 
[size_download] => 0 
[speed_download] => 0 
[speed_upload] => 204 
[download_content_length] => 0 
[upload_content_length] => 331 
[starttransfer_time] => 1.466139 
[redirect_time] => 0 
[redirect_url] => 
[primary_ip] => 74.112.184.85 
[certinfo] => Array 
(
) 
[primary_port] => 443 
[local_ip] => 213.230.222.4 
[local_port] => 52643 
) 

Я ve посмотрел на подобные вопросы по SO, но не может видеть, что/где я ошибаюсь.

Библиотека я использую BoxPHPAPI

+0

Вы можете получить журнал фактического запроса HTTP, который, вносимый? Если вы находитесь на OS X или Linux, простой способ сделать это - запустить «nc -l localhost 8080», а затем сделать запрос cURL «http: // localhost: 8080/api/2.0/files/content' вместо Box. – Greg

+0

на Windows, к сожалению, посмотрел на заголовки, которые завиток посылал, но не может определить, что не так, попытался сделать это через shell_exec, а работает отлично. Я поеду с этим вариантом. – Dave

+0

В случае, если это поможет, вот пример того, как должен выглядеть весь HTTP-запрос: http://stackoverflow.com/a/27759602/108 – Greg

ответ

0

Не идеально, но получил эту работу, используя shell_exec вместо:

$cmd = "curl https://upload.box.com/api/2.0/files/content \ 
-H \"Authorization: Bearer $this->access_token\" -X POST \ 
-F attributes='{\"name\":\"$filename\",\"parent\": {\"id\":\"$parent_id\"}}' \ 
-F [email protected]\"$filename\""; 

shell_exec($cmd); 
Смежные вопросы