Symfony2 - 在上传之前验证文件大小

时间:2014-07-31 09:37:30

标签: php symfony file-upload

我在用户上传文件时验证文件大小,但是当文件太大时,我得到了奇怪的结果:

控制器:

// 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 = 2Mpost_max_size = 2M)中:

如果文件太大,我会收到两个错误:

  

令牌无效。

     

上传的文件太大了。

在VPS(upload_max_filesize = 2Mpost_max_size = 2M)中:

如果文件太大,请先尝试上传文件,然后抛出内部服务器错误。查看日志我可以看到错误是由于实体无效,因为文件太大。所以它似乎试图移动文件,即使它太大了......

1 个答案:

答案 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." }

希望这有帮助。

干杯!