我正在尝试验证图像,因此用户只能输入五个图像(最大),并且他也不能上传video,ai,psd等。到目前为止,当我尝试上传视频时会显示没有错误,它也不会上传产品,如果我尝试上传psd之类的其他文件,则会显示错误。
Illuminate \ Http \ Exceptions \ PostTooLargeException
我如何才能仅验证要上传的最多五张图像,并且仅验证mimes:jpeg,jpg,png
这些类型的文件?
代码
控制器
public function store(Request $request)
{
$this->validate(
$request,
[
'photos' => 'required',
'photos.*' => '|mimes:jpeg,jpg,png',
]);
foreach ($request->photos as $photo) {
$filename = $photo->store('public/photos');
ProductsPhoto::create([
'product_id' => $product->id,
'filename' => $filename
]);
}
}
刀片模板
<input multiple="multiple" name="photos[]" type="file">
答案 0 :(得分:0)
如果我尝试上传psd之类的其他文件,则会显示错误
Illuminate\Http\Exceptions\PostTooLargeException
当有效负载高于服务器配置的PostTooLargeException
时,将抛出upload_max_filesize
(当然,您可以自定义此设置)。例如,如果用户尝试上传视频,则总是会抛出该错误。现在,您可以用不同的方式(不是排他性的)来对待它:
对于后一种选项,您可以使用max验证规则验证之后的size规则。从文档中:
max:value
正在验证的字段必须小于或等于最大值 值。字符串,数字,数组和文件的计算方式相同 时尚就是大小规则。
大小:值
正在验证的字段必须具有与给定值匹配的大小。 对于字符串数据,值对应于字符数。对于 数字数据,值对应于给定的整数值。 对于 数组,其大小对应于数组的
count
。 对于文件, size对应于文件大小(以千字节为单位)。
因此,您可以检查上传的文件:
$this->validate(
$request,
[
'photos' => 'required',
'photos.*' => 'mimes:jpeg,jpg,png|max:4000', // e.g., each file should be less than 4MB
)];
与下一件事情有关:
如何验证最多只能上传五个图像?
您可以使用相同的规则,但是现在可以验证数组大小:
$this->validate(
$request,
[
'photos' => 'required|array|max:5', // <----
'photos.*' => 'mimes:jpeg,jpg,png',
)];
当然,您可以结合使用这些限制来完成所需的行为。
答案 1 :(得分:0)
很简单,我之前做过:
$galleryImageCount = 0; // count the number of existing images if needed
$galleryImageRules = ['bail|image|mimes:jpeg,png,jpg|max:5120','bail|sometimes|image|mimes:jpeg,png,jpg|max:5120'];
$imageRule = [];
for ($i = 0; $i < (5 - $galleryImageCount); $i++) {
$rule = ($i == 0) ? $galleryImageRules[0] : $galleryImageRules[1];
$key = 'gallery_image.' . $i;
$imageRule[$key] = $rule;
}
$this->validate(
$request,
$imageRule);
//Replace 'gallery_image' with 'photos' in your case.