Zend_Form_Element_File多个文件上传和mysql

时间:2012-02-20 17:09:54

标签: zend-framework

有没有人知道接收多个文件的工作示例,将它们存储在一个文件夹中以及mysql表中的名称?有些日子已经没有运气了,有些东西总是缺失,在提出这些问题之前,好吧,也许我能找到合适的人!

可能? 我正在学习使用zend 1.11

感谢 巴勃罗

编辑: 我添加清晰的代码: 形式如下:

$element = new Zend_Form_Element_File('images');
$element->setLabel('Upload bis 3 Bilder (máx. 200kb each):')
                ->setMultiFile(3)
                ->setValueDisabled(true)
                ->addValidator(new Zend_Validate_File_Size('2MB'))
                ->addValidator('Count', false, array('min'=>0,'max' => 3));

在控制器中:

$adapter = $form->images->getTransferAdapter();
//create directory where files would be hold
if (!file_exists(UPLOADDIR))
mkdir(UPLOADDIR, 0777, 1);

$i=0;
$images="";
//loop uploaded files

foreach ($adapter->getFileInfo() as $info)
{     
//rename file how you like and move it to given destination
$fileName = time().$i.'.'.$this->getExtension($info['name']);
$adapter->addFilter('Rename', array('target'=>UPLOADDIR.$fileName, 'overwrite'=>true));

//if something goes wrong print errors in screen
if (!$adapter->receive($info['name']))
{
die(print_r($adapter->getMessages(),1));
}else{
 if ($info['name']!==""){
 $images .= $fileName.",";
 }
}
$i++;
}                

1 个答案:

答案 0 :(得分:1)

我认为你应该在适配器上使用setFilters()而不是addFilter,因为当前代码将在foreach循环的每次迭代中添加一个新的重命名过滤器。

尝试更换:

$adapter->addFilter('Rename', array('target'=>UPLOADDIR.$fileName, 'overwrite'=>true));

$adapter->setFilters(array(new Zend_Filter_File_Rename(array('target'=>UPLOADDIR.$fileName, 'overwrite'=>true))));