2014-01-20 68 views
0

我想用php和Zend框架上傳BOX_API中的文件。但我錯過了一些事情。這是我第一次使用這樣的界面o我讀過manual。但這對我來說很混亂。我的問題是兩個:BOX-API上傳文件形式

- 首先,爲什麼你必須傳遞給文件名稱的文件而不是整個文件的文件上傳正確的頭文件?表單中的文件上傳不像通過郵寄呼叫傳遞文件的名稱;

-secondly因此,我必須做一個文件上傳的形式,或者只是一個textarea在哪裏寫的文件名稱傳遞給BOX-API?

UPDATE: 這是我上傳的形式的代碼:

$form = new Zend_Form; 
    $form->setAction('/imball-reagens/public/upload') 
    ->setMethod('post'); 
    $file = new Zend_Form_Element_File('file'); 
    $file->setLabel('Choose a file to upload:'); 
    $file->addValidator('alnum'); 
    $file->setRequired(true); 
    $form->addElement($file); 
    $access_token = new Zend_Form_Element_Hidden(array('name' => 'access_token', 'value' => $result->access_token)); 
    $form->addElement($access_token); 
    $refresh_token = new Zend_Form_Element_Hidden(array('name' => 'refresh_token', 'value' => $result->refresh_token)); 
    $form->addElement($refresh_token); 
    $form->addElement('submit', 'upload', array('label' => 'Upload File')); 
    echo $form; 

而這個S中的POST CAL的框API,它自帶的形式後:

$access_token= $this->getRequest()->getParam('access_token'); 
    $client = new Zend_Http_Client('https://upload.box.com/api/2.0/files/content'); 
    $client->setMethod(Zend_Http_Client::POST); 
    $client->setHeaders('Authorization: Bearer '.$access_token); 
    $data = $_FILES["file"]["name"]; 
    $client->setParameterPost(array(
      'filename' => '@'.$data, 
      'parent_id' => '0' 
    )); 
    $response = $client->request()->getBody(); 
    $this->view->response= $response; 
    $result = json_decode($response); 

它拋出的錯誤如下:

{"type":"error","status":400,"code":"invalid_request_parameters","help_url":"http:\/\/developers.box.com\/docs\/#errors","message":"Invalid input parameters in request","request_id":"172518183652dcf2a16af73"} 

回答

1

棘手的調試沒有看到所有的代碼,但在雙你粘貼它看起來像你正在傳遞$_FILES["file"]["name"]到API - 這隻包含由用戶上傳的文件的原始名稱 - 您需要將位置傳遞到正在發送數據到Box的服務器上的文件API客戶端,以便它可以抓取併發送到Box服務器 - 這應該存儲在$_FILES["file"]["tmp_name"]

我會建議更改代碼本,並再次嘗試:

$access_token= $this->getRequest()->getParam('access_token'); 
$client = new Zend_Http_Client('https://upload.box.com/api/2.0/files/content'); 
$client->setMethod(Zend_Http_Client::POST); 
$client->setHeaders('Authorization: Bearer '.$access_token); 
$data = $_FILES["file"]["tmp_name"]; 
$client->setParameterPost(array(
    'parent_id' => '0' 
)); 
$client->setFileUpload($data, 'filename'); 
$response = $client->request()->getBody(); 
$this->view->response= $response; 
$result = json_decode($response); 
+0

我tryied它,但反應總是相同的錯誤。我想我也必須檢查其他參數。無論如何,謝謝你的回答! – softwareplay

+0

錯誤是否可能在URL行中?我應該寫「http」還是「https」? – softwareplay

+1

奇怪的是,也許先用'move_uploaded_file' - http://uk1.php.net/move_uploaded_file將文件保存到某處,然後將文件名和路徑提供給Box API?我認爲Box API需要HTTPS。另外,我會檢查你是如何得到你的訪問令牌的,也許錯誤在那裏。 – madebydavid