【发布时间】: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 变量/对象与哪个对象相关。
有人知道如何解决这个问题吗? 谢谢
【问题讨论】:
-
$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