干预图像库 - 每当上传错误的图像格式时,我希望能够在 Laravel 中捕获它并将其发送到前端

Intervention Image Library - whenever a wrong image format is uploaded, I want to be able to catch it and send it to frontend in Laravel

我正在使用 PHP 干预图像库将图像上传到我的系统。我在后端使用 Laravel。当图像格式正确时,它可以正常工作,但我无法正确处理错误。我正在尝试通过上传 .txt 文件来测试此功能,预计它会抛出错误并且它在后端给我一个错误。到这里为止一切正常。

development.ERROR: Unsupported image type text/plain. GD driver is only able to decode 
JPG, PNG, GIF, BMP or WebP files. 
{"exception":"[object(Intervention\Image\Exception\NotReadableException(code: 0):
Unsupported image type text/plain. GD driver is only able to decode JPG, PNG, GIF, BMP or WebP files.

我试图接受这个错误并将其发送到前端,并附上一条消息,以正确的格式上传图像,但是当我记录图像数组时,它显示错误为 0。

下面是我在 Controller 中的代码

Laravel 后端图像创建代码

$image = $this->request->file('image'); // getting the image from frontend
                
        \Log::info("image array is: ".print_r($image,true));

这里是上面日志的日志错误

Laravel

中日志消息的输出
(
    [test:Symfony\Component\HttpFoundation\File\UploadedFile:private] => 
    [originalName:Symfony\Component\HttpFoundation\File\UploadedFile:private] => iPad_useragents.txt
    [mimeType:Symfony\Component\HttpFoundation\File\UploadedFile:private] => text/plain
    [error:Symfony\Component\HttpFoundation\File\UploadedFile:private] => 0
    [hashName:protected] => 
    [pathName:SplFileInfo:private] => /tmp/phpqPyk5F
    [fileName:SplFileInfo:private] => phpqPyk5F
)

在输出中,我们可以看到错误为 0,但是当我上传预期的文本文件时它会抛出错误。

有人可以帮助解决这个错误吗,即每当上传错误的图像格式时,我希望能够捕获它并将其发送到 Laravel 中的前端?

您可以通过调用 $image->getMimeType(); 获取文件的 MIME 类型,如果不是图像类型则抛出错误,然后再尝试将文件作为图像进行操作。

检查文件类型应该是表单验证的一部分。在您的控制器中:

$validator = Validator::make($request->all(), [
    'image' => 'mimes:jpeg,bmp,png'
]);

if ($validator->fails()) {
    return redirect('image/upload')
        ->withErrors($validator)
        ->withInput();
}

// Continue image handling 

https://laravel.com/docs/5.1/validation#rule-mimes

查看文档 here and here