【问题标题】:Symfony 4 upload multiple files and changing max sizeSymfony 4 上传多个文件并更改最大大小
【发布时间】:2020-08-13 21:01:09
【问题描述】:

社区大家好,

我正在构建一个上传图片的作品集页面,我创建了一个类作品集,我在其中保存了类图像的集合。

class PortofolioPage


/**
* @ORM\OneToMany(targetEntity="App\Entity\Image", mappedBy="natureGallery", cascade={"persist"})
 */
private $natureGallery;

和我的表单类型:

use Symfony\Component\Validator\Constraints\Image;
use Symfony\Component\Form\Extension\Core\Type\FileType;

->add('natureGallery', FileType::class, [
            'multiple' => true,
            'label' => 'form.natureGallery',
            'mapped' => false,
            'required' => false,
            'constraints' => [
                new Image([
                    'maxSize' => '5M',
                ])
            ],
        ])

没有约束部分,我可以上传图像,但我的 maxSize 为 2M,如果约束部分处于活动状态,我会收到错误消息“此值应为字符串类型”(我想我不喜欢创建新的图像它得到一个数组),如果我停用多个静止图像不允许我上传超过 2M。

我已经修改了我的 php.ini,post_max_size = 50M 和 upload_max_filesize = 50M,并按照https://symfony.com/doc/4.4/controller/upload_file.html 中的文档进行操作,并检查了 symfonycast,但我没有找到解决方案。

感谢您的宝贵时间和愉快的编码

【问题讨论】:

  • 也许这可以帮助你link
  • 感谢 DaszuOne,我检查了 validator.yaml, dataclass=> null 并将其用作类中的断言,没有任何效果,尝试删除多个选项。让我烦恼的另一件事是,即使我指定了最大 5M,当我提交高于它的内容时它一直告诉我最大是 2M,还有另一个文件告诉 symfony 文件的最大?
  • 我现在没有别的想法了。我稍后会尝试重现您的情况,也许我们可以解决这个问题。您使用的是 symfony 4.4,对吗?
  • 是的,我使用的是 symfony 4.4,我检查过。这是我在 github github.com/erethilclaw/photoBlog 中的项目,我想这与我与班级的关系有关,没有很好地收集收藏...检查 symfonyCasts 教程(是 v5)也许我发现了一些东西。并感谢您的帮助 DaszuOne。
  • 你好@DaszuOne,Using All 约束修复了字符串错误,但我仍然无法上传超过 2M 的图像 ->add('natureGallery', FileType::class, ['multiple' => true, 'label' => 'form.natureGallery', 'mapped' => false, 'required' => false, 'constraints' => new All([ new Image([ 'maxSize' => '5M' ]) ]), ]) 并在类 @Assert\All(@Assert\Image(maxSize="5M")) 中尝试

标签: php symfony file-upload symfony4


【解决方案1】:

对于多文件上传器,您应该将Image 约束包装到All 约束中。那是因为提交的值将是对象的集合 (link)。如果您将多个选项切换为 false,您会看到您的约束正在工作...实际上它对您不起作用,因为您将提交的数据视为控制器中的集合。

因此,对于多次上传,请添加 use Symfony\Component\Validator\Constraints\All; 并将约束部分更改为:

new All([
    new Image([
        'maxSize' => '5M'
    ])
])

或者对于单次上传修改你的控制器(例如):

if (is_array($natureFiles)) {
   ...
} else {
    $filename = $fileUploader->uploadImage($natureFiles);

    $image = new Image();
    $image->setName($filename);
    $image->setUrl($this->getParameter('upload_directory').'natureGallery/'.$filename);

    $portofolio->addNatureGallery($image);
}

【讨论】:

  • 你好@DaszuOne,使用所有约束修复了字符串错误,但我仍然无法上传超过 2M 的图像 ->add('natureGallery', FileType::class, ['multiple' => true , 'label' => 'form.natureGallery', 'mapped' => false, 'required' => false, 'constraints' => new All([ new Image([ 'maxSize' => '5M' ]) ] ), ]) 我得到了 2 次错误,使用 symfony 调试器,一个来自验证器,另一个未知。
  • 现在 symfony 验证器告诉您文件大于 2M,即使将约束设置为 5M?还是错误信息现在不同了?确保您正在修改正确的 php.ini 文件。您是否使用 phpinfo() 检查了配置?我已经测试了你的代码,一切顺利。
  • 同样的错误,文件太大。允许的最大大小为 2 MiB。我得到了 2 次,使用 symfony 中的调试栏,第一次的原因我没有得到任何信息,第二次来自验证器。如果我的约束中的最大值低于 2M,我会在第二个错误中看到我的值(那个来自验证器)。我试图评论我所有的 validator.yaml 并没有检查 phpInfo(),post 和 max 设置为 50M,我正在查看 symfony.com/download 是否有一些变量需要调整。
  • 我认为您能做的最好的事情就是配置 xdebug 并检查验证器类中发生的情况。 Xdebug 是非常有用的工具,所以配置它不是浪费时间;)
  • 我将尝试使用 xdebug 调试该项目,我只得到这个工作一次,如果我发现发生了什么我会发布它。谢谢大苏一。 PD。当你说“测试你的代码”时,意味着你已经下载了我的项目?
猜你喜欢
  • 1970-01-01
  • 2020-07-07
  • 2017-08-01
  • 2011-09-28
  • 1970-01-01
相关资源
最近更新 更多