Php zend框架中的表单文件上传

Php zend框架中的表单文件上传,php,forms,zend-framework,file-upload,box-api,Php,Forms,Zend Framework,File Upload,Box Api,我正试图通过Zend Framework 1.12中的API(Box API)上传一个文件。但有一个问题。我的表单中有一个输入类型“file”,但我必须将文件名传递给box api。表单可能没有注册文件名,因为当我试图从POST调用中获取参数时,它不会返回任何内容。(我试着把它打印到输出上)。表格的代码如下所示: $form = new Zend_Form; $form->setAction('/imball-reagens/public/upload') ->

我正试图通过Zend Framework 1.12中的API(Box API)上传一个文件。但有一个问题。我的表单中有一个输入类型“file”,但我必须将文件名传递给box api。表单可能没有注册文件名,因为当我试图从POST调用中获取参数时,它不会返回任何内容。(我试着把它打印到输出上)。表格的代码如下所示:

   $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;
    $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);
    $client->setParameterPost(array(
            'filename'  => '@'.$this->getRequest()->getParam('file'),
            'parent_id' => '0'
    ));
处理表单的代码(表单调用的操作代码)如下所示:

   $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;
    $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);
    $client->setParameterPost(array(
            'filename'  => '@'.$this->getRequest()->getParam('file'),
            'parent_id' => '0'
    ));
具体而言,这一行:

 'filename'  => '@'.$this->getRequest()->getParam('file'),
可能已更改,因为它将字段留空并引发此错误:

 {"type":"error","status":400,"code":"invalid_request_parameters","help_url":"http:\/\/developers.box.com\/docs\/#errors","message":"Invalid input parameters in request","request_id":"116495728752d937d3c6ca5"}
我发现了很多方法,但它们都是将表单作为类来构建的,这里我只是使用Zend form类,而不是像示例中那样为表单构建新类

我得到了zend聊天室irc的一点帮助。此命令:

 $data = array_merge($request->getPost(), $request->getFiles())
但是我不知道$request变量/object与哪个对象相关

有人知道如何解决这个问题吗?
谢谢

好的,这个问题的正确答案就在这里。我在这方面做了很多工作,发现它是zend framework上传文件的快捷方式:

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

我的2美分。

此链接可能有帮助$request是请求对象。将代码更改为
$data=array\u merge($this->\u request->getPost(),$this->\u request->getFiles())
@user3165879调用未定义的方法Zend\u Controller\u request\u Http::getFiles():(抱歉@Patrick Q这是zend framework 2.1版的手册。我不确定zend framework 1.12中是否存在相同的类,我将在周末查看我的手册。谢谢大家!