File upload BOX-API上传文件格式

File upload BOX-API上传文件格式,file-upload,box-api,File Upload,Box Api,我正试图用php和Zend框架在BOX_API中上传一个文件。但是我错过了一些东西。这是我第一次使用像这样的界面,我读过。但这对我来说很困惑。我的问题有两个: -首先,为什么您只需将文件名传递给post调用,而不必将具有正确头的整个文件传递给post调用以进行文件上载?表单中的文件上传与通过post调用传递文件名不同 -其次,因此,我是否必须为文件上传制作一个表单,或者仅仅是一个文本区域,在其中写入要传递给BOX-API的文件名 更新: 这是我上传表单的代码: $form = new Z

我正试图用php和Zend框架在BOX_API中上传一个文件。但是我错过了一些东西。这是我第一次使用像这样的界面,我读过。但这对我来说很困惑。我的问题有两个:

-首先,为什么您只需将文件名传递给post调用,而不必将具有正确头的整个文件传递给post调用以进行文件上载?表单中的文件上传与通过post调用传递文件名不同

-其次,因此,我是否必须为文件上传制作一个表单,或者仅仅是一个文本区域,在其中写入要传递给BOX-API的文件名

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

    $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;
这是表单后面的POST cal to the box 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"}

在没有看到所有代码的情况下进行调试很困难,但是在粘贴的位中,看起来您正在传递
$\u文件[“file”][“name”]
到API-这只包含用户上载的文件的原始名称-您需要将位置传递到服务器上的文件,该服务器正在将数据发送到Box API客户端,以便它可以获取数据并将其发送到Box服务器-该位置应存储在
$\u文件[“文件”][“tmp\u名称”]

我建议将代码更改为此,然后重试:

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

我试过了,但反应总是一样的错误。我想我还得检查其他参数。谢谢你的回答!是否可能错误就在URL行中?我应该写“http”还是“https”?奇怪的是,可能先用
move\u upload\u file
将文件保存在某个地方,然后给出Box API的文件名和路径?我认为Box API需要HTTPS。另外,我会检查你是如何获得访问令牌的,也许错误就在那里。我想Zend http客户端可能会采取一些不同的上传方式-试试这个要点Box API不需要
@
符号-
@
语法只是用于curl-这样curl就知道
@
符号后面的任何东西都是文件名。对于Zend客户端,您具有
setFileUpload
功能,因此不需要
@
符号。