Laravel 5:在不更改php.ini的情况下设置上传文件的限制?

时间:2016-05-31 07:29:07

标签: php laravel laravel-5

我了解到需要修改php.ini中的值才能设置上传文件的限制。但是,我处于无法触及php.ini的情况。

让我简要解释一下这个问题。

<input type="file" name="thumbnail" accept="image/*">

我试图获取thumbnail并将其置于控制器中。

if($this->request->hasFile('thumbnail')){
    $file = $this->request->file('thumbnail');
    //Other tasks
}

如果文件大小超过某个点,我想阻止它并显示警告。但是,显然,如果上传的文件超出限制, request->hasFile()会返回false,即使它实际上是真的。 (我在dd()

看到了

hasFile()可能无法捕捉到此类错误,因为它根本无法捕捉到它。

任何建议都将受到赞赏。

3 个答案:

答案 0 :(得分:2)

使用验证规则max

$validator = Validator::make($request->all(), [
    ...
    'thumbnail' => 'max:30000', // kilobytes
    ...
]);

答案 1 :(得分:1)

首先,请确保您的表单使用multipart/form-data enctype。

<form action="/upload-image" method="post" enctype="multipart/form-data">
    <input type="file" name="thumbnail" accept="image/*">
    <input type="submit">
</form>

要获取文件大小,您可以使用UploadedFile对象的getClientSize()函数。

因此,要限制大小并显示警告,您可以执行以下操作:

if ($this->request->file('thumbnail')->getClientSize() > 5){
    return redirect()->back()->withErrors(['thumbnail', 'File is too big. Limit is 5MB.']);
}

然后在视图中打印错误。

答案 2 :(得分:0)

您是否检查过验证规则?

验证文件

规则:

size:value

验证字段的大小必须与给定值匹配。对于字符串数据,value对应于字符数。对于数字数据,value对应于给定的整数值。对于文件,size对应于文件大小(以KB为单位)。