【问题标题】:CakePHP: posted file data not included in request->dataCakePHP:发布的文件数据不包含在请求->数据中
【发布时间】:2013-07-12 19:45:06
【问题描述】:

我正在尝试将文件上传到第 3 方端点,但我无法直接从我的表单中发布文件,因为 API 需要一个我无法向最终用户公开的 api_key。因此,我的计划是将表单指向控制器/操作并从那里发布数据。但是,当我从控制器内部debug($this->request->data) 时,文件数据丢失了。

视图上的表单:

echo $this->Form->create('Media', array('type'=>"file", 'url'=>array('controller'=>'media', 'action'=>'upload') ) );
echo $this->Form->input('name', array("name"=>"name") );
echo $this->Form->input('file', array('type'=>'file', "name"=>"file") );
echo $this->Form->input('project_id', array('type'=>'hidden', "name"=>"project_id", "value"=>$project["Project"]['hashed_id']) );
//THIS CANNOT BE HERE: echo $this->Form->input('api_password', array('type'=>'hidden', "name"=>"api_password", "value"=>'xxxxxxx') );
echo $this->Form->end("Submit");

这是我在debug() 来自控制器的请求数据时看到的内容:

array(
    'name' => 'Some Name',
    'project_id' => 'dylh360omu',
)

这是怎么回事?

【问题讨论】:

  • 您是否尝试过完全相同的方法,但没有更改输入名称?
  • 您是否尝试过查看 $this->request 中的内容? debug($this->request)I 事物文件数据在请求数据之外进行管理。
  • 文件有多大,upload_max_filesize 和 max_post_size 指令是否允许该文件大小?
  • @我是 John Galt:文件数据在 $this->request->data 中处理
  • @Nunser:没试过,但我会的。也许是一个错误?您是否理解它通常应该存在于数据数组中?

标签: php cakephp post cakephp-2.0


【解决方案1】:

文件上传数据只能在CakeRequest::$data中找到,以防输入元素名称传入名为data的数组中(不手动定义具体名称时默认),即:

<input type='file' name='data[file]'>

但是,在您的情况下,元素将如下所示:

<input type='file' name='file'>

这将导致文件数据被放入CakeRequest::$params[form]

https://github.com/cakephp/cakephp/blob/2.4.0/lib/Cake/Network/CakeRequest.php#L346

所以要么相应地更改表单中的名称:

$this->Form->input('file', array('type' => 'file', 'name' => 'data[file]'));

或者通过CakeRequest::$params[form]访问文件数据:

debug($this->request->params['form']);

【讨论】:

  • 太棒了!你是怎么知道的?
【解决方案2】:

Nunser 是对的(一如既往)!问题是由自定义输入名称引起的。当我从选项数组中删除 'name'=&gt;'...' 时,文件按预期显示。这似乎是一个错误,但如果有人有更好的解释,我很想听听。

【讨论】:

  • 嗨。我很高兴现在正在工作。不过,ndm 的回答似乎是问题的原因。正如他解释的那样,这不是一个错误,只是“发生了一些事情”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-11-24
  • 1970-01-01
  • 2011-04-11
  • 1970-01-01
  • 2020-03-17
  • 2020-04-12
  • 1970-01-01
相关资源
最近更新 更多