好吧,所以我做了更多挖掘,结果发现我的链接方式可能有问题addFilter()
所以我决定朝不同的方向前进,尝试隔离每个文件并单独处理它的上传。到目前为止,它似乎正在发挥作用。这是修改后的代码:
$data['image'] = (isset($_FILES["image"]) && $_FILES["image"]["name"] ? $_FILES["image"]["name"] : NULL);
$data['file'] = (isset($_FILES["file"]) && $_FILES["file"]["name"] ? $_FILES["file"]["name"] : NULL);
$upload = new Zend_File_Transfer();
$files = $upload->getFileInfo();
$options = array('ignoreNoFile' => TRUE);
$upload->setOptions($options);
foreach ($files as $field => $contents)
{
if(!strlen($contents["name"]))
{
continue;
}
// upload instructions for image
if ($field == 'image')
{
$upload->addFilter('Rename', array('target' => RESOURCES_IMG . $data['image'], 'overwrite' => TRUE), 'image')
->addValidator('ImageSize', false, array('minwidth' => 100,
'maxwidth' => 100,
'minheight' => 100,
'maxheight' => 100), 'image')
->addValidator('Extension', false, 'jpg', 'image');
}
// upload instructions for file
if ($field == 'file')
{
$upload->addFilter('Rename', array('target' => RESOURCES_FILES . $data['file'], 'overwrite' => TRUE), 'file');
}
if(!$upload->receive($field)) {
echo '<h1>Oops</h1><p>Please correct the following errors: <hr /></p>';
foreach ($upload->getMessages() as $key => $val)
{
echo '<p><strong>' . $key . '</strong><br />' . $val . '</p>';
}
die;
//return;
}
} // foreach
伪解释
我用getFileInfo()
获取我可用的文件数组,然后循环遍历每个文件。在我第一次的开始for
循环我检查该文件是否有名称,如果没有名称,我假设该字段留空并且是NULL
所以我告诉循环跳过那个continue
.
一旦进入循环,我只需使用简单的条件将上传指令与适当的表单字段进行匹配。如果您喜欢 Zend 的东西,其余的应该是不言自明的。
希望这可以帮助处于我困境的其他人。如果您是 Zend 专家,也许您可以评论我的解决方案或修复导致问题的错误。可能有一种更“Zend”的方式来做到这一点,但它现在正在工作,而且感觉非常好。
参考
为什么我认为这是连锁的addFilter()
方法,请参见示例#3(如下)下的注释:
注意:请注意,即使允许多次设置相同的过滤器,但在对同一过滤器使用不同选项时,这样做可能会导致问题。
http://framework.zend.com/manual/1.11/en/zend.file.transfer.filters.html http://framework.zend.com/manual/1.11/en/zend.file.transfer.filters.html
一篇随机的博客文章启发我尝试隔离每个,我称之为“上传指令”,尽管我不确定它是否是这样称呼的:
http://www.pc-freak.net/blog/tag/uploading-multiple-files-from-a-form-with-zend-framework-zf-storing-uploaded-zf-files-with-unique-name/ http://www.pc-freak.net/blog/tag/uploading-multiple-files-from-a-form-with-zend-framework-zf-storing-uploaded-zf-files-with-unique-name/