Modus Operandi - 使用Zend Framework和HTML5上传和调整多个图像

时间:2011-03-09 12:01:48

标签: zend-framework html5 upload

好消息:

  • 我不在乎它是否使用ajax。
  • 我不在乎用户是否必须安装特定的浏览器才能使其正常工作。
  • 我不在乎是否有任何特定的进度条。

坏消息:

  • 我不想使用闪光灯。

用户必须从任何宽度或高度上传文件 - 但不得大于8MB。 该文件必须存储在特定文件夹(或数据库列)中。 必须在特定文件夹(或数据库列)上生成缩略图。

这些图像必须与特定记录相关联。

这是一个“运作方式”问题,我意识到这里涉及的代码很多。

所以:

  1. 我们首先创建表单元素以支持多次上传,如下所示:

    $element = new Zend_Form_Element_File('multifile');
    $element->setAttrib('multiple', true);
    $element->setIsArray(true);
    
  2. 然后,我们需要添加一些验证并允许扩展;

  3. 然后我们需要处理上传;
  4. 上传完成后,我们需要根据需要调整这些文件的大小。
  5. 我们需要将这些已调整大小的文件存储在其他位置。
  6. 完成所有这些后,我们准备显示与特定数据库记录关联的文件了吗?
  7. 这是要走的路吗?我应该有更多的步骤吗?我错过了什么。我之前从未这样做过,但我认为这是一次挑战。

1 个答案:

答案 0 :(得分:4)

首先,您创建一个表单。这里并不太复杂:

$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))
;

在控制器中,您会收到图像。他们将拥有临时随机名称,如果您愿意,可以稍后保留(我通常这样做)。

$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);
    }
}

就是这样;)