BOX-API upload file form

纵饮孤独 提交于 2019-12-25 12:22:50

问题


i'm trying to upload a file in BOX_API with php and Zend framework. But i'm missing somethin. It's the first time that i use an interface like this o i've read the manual. But it is confusig for me. My question are two:

-First, why do you have to pass to the post call only the name of the file and not the whole file with the right header for file upload? File upload in a form is not like passing the name of the file through a post call;

-secondly and consequently, do i have to make a form for file upload or simply a textarea where to write the name of the file to be passed to the BOX-API?

UPDATE: This is the code of my upload form:

    $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;

And this s the POST cal to the box API which comes after the form:

    $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);

The error it throws is below:

 {"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:


Tricky to debug without seeing all of the code, but in the bit you pasted it looks like you are passing $_FILES["file"]["name"] to the API - this only contains the original name of the file which was uploaded by the user - you need to pass the location to the file on the server which is sending the data to the Box API client so that it can grab it and send it to the Box server - this should be stored in $_FILES["file"]["tmp_name"].

I would recommend changing the code to this and trying again:

$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);


来源:https://stackoverflow.com/questions/21230295/box-api-upload-file-form

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!