我在用户上传文件时验证文件大小,但是当文件太大时,我得到了奇怪的结果:
控制器:
// Attachments form
$form = $this->createFormBuilder()
->add('file', 'file', array('label' => ' ',
))
->getForm();
if ($this->getRequest()->isMethod('post') && $form->bind($this->getRequest())->isValid()) {
$uploadedFile = $form['file']->getData();
...
}
实体:
namespace Pro\Bundle\Entity;
use Symfony\Component\HttpFoundation\File\File as SymfonyFile;
/**
* @ORM\Entity
* @ORM\Table(name="file")
*/
class File
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
//more properties...
/**
* @var SymfonyFile
* @Constraints\File(maxSize=2000000) // <2 MB
*/
private $filesystemFile;
function __construct(SymfonyFile $file, $name)
{
$this->created = new \DateTime;
$this->setFilesystemFile($file);
$this->name = $name;
}
//more methods...
function setFilesystemFile(SymfonyFile $file)
{
$this->filesystemFile = $file;
}
}
因此,当用户提交文件时,isValid
方法会检查文件大小。如果它大于2000000B则会引发错误。但是我得到了奇怪的结果:
在localhost(upload_max_filesize = 2M
,post_max_size = 2M
)中:
如果文件太大,我会收到两个错误:
令牌无效。
上传的文件太大了。
在VPS(upload_max_filesize = 2M
,post_max_size = 2M
)中:
如果文件太大,请先尝试上传文件,然后抛出内部服务器错误。查看日志我可以看到错误是由于实体无效,因为文件太大。所以它似乎试图移动文件,即使它太大了......
答案 0 :(得分:0)
你是否尝试在Entity文件中使用这样的函数并使用validation.yml文件添加验证?
public function isFilesystemFile()
{
$valid = false;
//do the validation such as file size is too large.
//then set the valid flag accordingly
return $valid;
}
在validation.yml文件中
Pro\Bundle\Entity\FilesystemFile:
getters:
FilesystemFile:
- "True": { message: "File size is too large." }
希望这有帮助。
干杯!