干预图像库 - 每当上传错误的图像格式时,我希望能够在 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
我正在使用 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