【问题标题】:How to get path from file variable in Symfony3如何从 Symfony3 中的文件变量中获取路径
【发布时间】:2017-05-05 18:00:47
【问题描述】:

我正在使用 Symfony3 开发一个网站,您可以上传一张图片作为您的个人资料。但我想检查图像是否真的是图像以及文件是否小于 2MB。

输入元素已经有一个accept='image/*' 属性,所以它只是服务器端我的问题。

这是我用来检查图像是否真的是小于 2MB 的图像的代码:

if(getimagesize($user->getAvatarFile()) !== false) {
    if ($organisation->getAvatarFile()->getSize() > 2000000){
        $this->addFlash('error', "Image too large!");
    }
} else {
    $this->addFlash('error', "File is not an image!");
}

来自用户的avatarFile 实际上就是那个文件,但是我如何获取它的路径以便可以使用getimagesize

提前谢谢你。

【问题讨论】:

    标签: php file path upload symfony


    【解决方案1】:

    您应该查看有关File 的symfony 文档(与Image 相同,除了mimeType)。

    有一些约束,比如maxSize,可能很有用。

    use Symfony\Component\Validator\Constraints as Assert;
    
    class User
    {
        /**
         * @Assert\Image(
         *     maxSize = "2M",
         *     maxSizeMessage= "The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}."
         * )
         */
        protected $AvatarFile;
    }
    

    编辑:如果您只想获取文件路径,在移动它之前,您可以使用getClientOriginalName 函数。请注意,它不会返回完整的文件路径,因为它可能是预期的,因为在上传时,文件会在 /tmp 目录上重命名,然后移动(因此,如果需要,重命名)。

    【讨论】:

    • 好的,我试试。如果它有效,我现在就让你。谢谢。
    • 当它上传并提交表单时,我仍然得到这个Warning: POST Content-Length of 5516431 bytes exceeds the limit of 3145728 bytes in Unknown on line 0
    • 看到这条消息,5.516.431 > 3.145.728。所以有一个错误。您尝试上传什么,大小是多少?另外,请确保您的 php.ini 也没有上传大小的下限。编辑:在您的 php ini 上,检查 valuesupload_max_filesizepost_max_size。之后别忘了重启apache。
    • 限制应该在2M以上,因为这个错误信息似乎告诉你你正在尝试上传一个5M的文件,并且限制设置为3M。断言约束应该允许您显示一些错误消息
    • php.ini 参数是最终限制,无论您在代码中设置什么(因为它是 apache 端)。因此,据我所知,不可能上传比 php.ini 中定义的限制更大的文件。因此,您需要设置比代码中更大的限制。
    猜你喜欢
    • 2020-05-11
    • 1970-01-01
    • 1970-01-01
    • 2013-07-25
    • 1970-01-01
    • 2018-06-13
    • 1970-01-01
    • 2011-11-06
    • 1970-01-01
    相关资源
    最近更新 更多