在我的表单中,我定义了这个文件上传字段:
$this->setEnctype(Zend_Form::ENCTYPE_MULTIPART);
$logo = $this->createElement('file', 'logo');
$logo->setLabel('Group logo')
->setMaxFileSize(5242880) // 5mb
->addValidator('IsImage')
->addValidator('Count', false, 1)
->addValidator('Size', false, 5242880)
->addValidator('Extension', false, array('jpg', 'jpeg', 'png', 'gif'));
但是,无论我上传的文件有多小,我都会收到此错误:文件“徽标”超出了定义的尺寸。
错误消息似乎非常简单,所以我检查了php配置(phpinfo()在处理表单的同一页上)
虽然这些值并不完全有意义,但它们绝对应该允许我上传高达8Mb的文件,但上传始终会因上面的消息而失败。即使小于1Kb的文件也会失败。我也尝试删除所有的setter /验证器,但它仍然失败。
在寻找答案时,我发现一些帖子说这是ajax的错,但这是一种常规形式,所以现在我被卡住了。
更新:我非常抱歉浪费了你的时间,页面上有另一个未公开的表格,这使得多部分声明无效。如果我使用较大的文件而不是小文件进行测试,可能会更早发现:/
答案 0 :(得分:14)
在表单中添加enctype="multipart/form-data"
。它应该可以解决你的问题。
答案 1 :(得分:6)
添加
enctype="multipart/form-data"
到您的<form>
元素。解决了我的问题。
答案 2 :(得分:3)
如果您使用脚本文件呈现文件,则需要从脚本文件中检索您在表单类中指定的enctype信息。 <form enctype="<?php echo $this->element->getAttrib("enctype"); ?>">
答案 3 :(得分:2)
有可能没有激活php扩展文件信息。
答案 4 :(得分:1)
看起来你错过了目的地:
$logo->setLabel('Group logo')
->setDestination('/var/www/upload')
...
您可能希望确保该文件夹可由Web服务器写入。
答案 5 :(得分:1)
当我注释掉以下内容时,我得到了同样的错误:
->setDestination($this->_config->folder->ugc);
->addValidator(Kvadrat_Form_Element_File::VALIDATE_COUNT, true, 1);
->addValidator(Kvadrat_Form_Element_File::VALIDATE_SIZE, true, 5 * 102400);
(我用FormData)
分别对文件上传进行了评论所以我取消评论它,这一切都再次奏效。
答案 6 :(得分:1)
请检查您的php.ini文件并增加upload_max_filesize
。默认情况下,它是2M(2兆字节)。另外,为了能够发布大小超过2M的文件,您需要更新post_max_size
的值
答案 7 :(得分:0)
您的尺码验证工具不正确。您应该使用以下格式:
->addValidator('Size', false, array('max' => '5242880'))
验证器检查文件大小== 5242880,不是&lt; = 5242880。