我正在开发一个版本为7.30.4的Laravel应用程序。这个项目进展顺利。但最近我将Laravel版本更新到了8.0.0版本。应用程序也正常工作。但是图像验证规则已经不起作用了。
这是我的规则
$rules = [
'logo' => 'nullable|image|mimes:jpeg,bmp,png,jpg'
];
当我尝试上传图像时,它总是给出验证错误
"徽标必须是图像。"。
但在Laravel 7中,我从未用同一个文件遇到过这个问题。
在我的生产服务器上,该项目运行在Laravel 7.30.4上。我担心如果我在生产中更新版本,那么图像验证将不再有效。
问题是,为什么图像验证的行为不适用于Laravel 8.0版本,而它适用于以前的版本。
更新:-
- 我还检查了jpg/jpeg图像的问题
- PNG文件运行良好,但在jpg/jpeg图像的情况下,它总是会出现上述验证错误
- 当我尝试上传BMP文件时,它会出现错误"不支持的图像类型。GD驱动程序仅能够解码JPG、PNG等,GIF或WebP文件">
I调查并检查,在Laravel版本(v8.17.0之前(的图像验证规则中,他们没有为mimes列表数组添加"jpg"。这就是我无法上传jpg文件的原因。然而;jpg";出现在Laravel版本7的模拟列表中。
https://github.com/laravel/framework/blob/v8.17.0/src/Illuminate/Validation/Concerns/ValidatesAttributes.php#L1030
/**
* Validate the MIME type of a file is an image MIME type.
*
* @param string $attribute
* @param mixed $value
* @return bool
*/
public function validateImage($attribute, $value)
{
return $this->validateMimes($attribute, $value, ['jpg', 'jpeg', 'png', 'gif', 'bmp', 'svg', 'webp']);
}
https://github.com/laravel/framework/blob/v8.16.1/src/Illuminate/Validation/Concerns/ValidatesAttributes.php#L1030
/**
* Validate the MIME type of a file is an image MIME type.
*
* @param string $attribute
* @param mixed $value
* @return bool
*/
public function validateImage($attribute, $value)
{
return $this->validateMimes($attribute, $value, ['jpeg', 'png', 'gif', 'bmp', 'svg', 'webp']);
}
因此,解决方案是将Laravel版本至少升级到v8.17.0。
或者有人能告诉我更新现有列表的更好方法吗?因为当我尝试升级Laravel版本时,也会出现一些兼容问题,而且我们不应该更改供应商文件夹中的内容,因为在下一次composer更新时,它会覆盖或删除更改?