首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >BOX-API上载文件表单

BOX-API上载文件表单
EN

Stack Overflow用户
提问于 2014-01-20 09:27:29
回答 1查看 2.2K关注 0票数 0

我正在使用php和在BOX_API中上传一个文件。但我错过了一些东西。这是我第一次使用像这样的接口--我读过手册。但这对我来说是一种困惑。我的问题有两个:

-First,为什么您必须只传递给post调用文件的名称,而不是文件上传的整个文件头?在表单中上传文件不像通过post调用传递文件的名称;

-secondly,因此,我是否必须为文件上传创建一个表单,或者仅仅是一个文本区域,在其中写入要传递给BOX的文件的名称?

更新:这是我上传表格的代码:

代码语言:javascript
复制
    $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;

这是到方框API的POST,该API在表单之后:

代码语言:javascript
复制
    $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);

它引发的错误如下:

代码语言:javascript
复制
 {"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"}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-20 19:26:34

在没有看到所有代码的情况下调试是很棘手的,但在粘贴的位中,它看起来像是将$_FILES["file"]["name"]传递给API --这只包含用户上传的文件的原始名称--您需要将位置传递到服务器上的文件,该文件将数据发送到Box API客户端,以便它能够抓取数据并将其发送到服务器--这应该存储在$_FILES["file"]["tmp_name"]中。

我建议将代码更改为以下代码,然后再试一次:

代码语言:javascript
复制
$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);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21230295

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档