【问题标题】:Form file upload in zend frameworkZend框架中的表单文件上传
【发布时间】:2023-03-13 16:45:02
【问题描述】:

我正在尝试通过 Zend Framework 1.12 中的 API (Box-API) 上传文件。但有一个问题。我的表单中有一个输入类型“文件”,但我必须将文件名传递给 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'
    ));

特别是这一行:

 '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 类,而不是像this 示例中那样为表单构建一个新类。

我从 zend 聊天室 irc 得到了一点帮助。这个命令:

 $data = array_merge($request->getPost(), $request->getFiles())

但我不知道 $request 变量/对象与哪个对象相关。

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

【问题讨论】:

  • 这个链接可能对framework.zend.com/manual/2.1/en/modules/…有帮助
  • $request 是请求对象。将您的代码更改为$data = array_merge($this->_request->getPost(), $this->_request->getFiles())
  • @user3165879 调用未定义的方法 Zend_Controller_Request_Http::getFiles() :( 抱歉@Patrick Q 这是 zend 框架 2.1 版的手册。我不确定 Zend 框架中是否存在相同的类1.12,我会在周末检查我的手册。无论如何,谢谢大家!

标签: php forms zend-framework file-upload box-api


【解决方案1】:

好的,这个问题的正确答案在这个other stackoverflow question 中。我在这方面做了很多工作,发现这是一个用于文件上传的 zend 框架快捷方式:

 $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 美分。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-30
    • 1970-01-01
    • 1970-01-01
    • 2013-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多