好消息:
- 我不在乎它是否使用 ajax。
- 我不关心用户是否必须安装特定的浏览器才能使其正常工作。
- 我不关心是否有任何特定的进度条。
坏消息:
用户必须上传任意宽度或高度的文件 - 但不得超过 8MB。该文件必须存储在特定文件夹(或数据库列)中。必须在特定文件夹(或数据库列)上生成缩略图。
这些图像必须与特定记录相关联。
这是一个“作案手法”的问题,我意识到这里涉及的代码太多了。
所以:
我们首先创建我们的表单元素来支持多次上传,如下所示:
$element = new Zend_Form_Element_File('multifile');
$element->setAttrib('multiple', true);
$element->setIsArray(true);
然后,我们需要添加一些验证和允许的扩展;
- 然后我们需要处理上传;
- 上传完成后,我们需要根据需要调整这些多个文件的大小。
- 我们需要将那些调整大小的文件存储在其他地方。
- 完成所有这些后,我们就可以显示与特定数据库记录关联的文件了吗?
这是要走的路吗?我应该有更多的步骤吗?我错过了什么吗?我以前从未这样做过,但我将其视为挑战。
首先,您创建一个表单。这里没有太多复杂性:
$this->addElement('File','Filedata');
$this->Filedata
->setLabel('Select images')
->setDestination('somepath') //define & create it somewhere earlier ;)
->addValidator('Size', false, 1024000)
->addValidator('Extension', false, 'jpg,png,gif')
->setMultiFile(5)
->addValidator('Count', false, array('min'=>0,'max' => 5))
;
在 Controller 中,您会收到图像。他们会有临时的随机名称,如果您愿意,您可以稍后保留这些名称(我通常这样做)。
$fileinfo = $form->Filedata->getFileInfo();
$path = 'somepath'; //make sure it exists
for($i=0;$i<5;$i++) {
if($fileinfo['Filedata_'.$i.'_']['tmp_name']) {
$img = new Imagick($fileinfo['Filedata_'.$i.'_']['tmp_name']);
// image processing goes here
file_put_contents('somepath',$img);
}
}
就是这样 ;)
我是一名优秀的程序员,十分优秀!