php - Laravel 图像规则验证不适用于 Laravel 8,但适用于 Laravel 7 | 拉拉维尔 | 图片 | 验证
问题描述
我正在开发一个版本为 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 文件。”
解决方案
我调查并检查,在 Laravel 版本(v8.17.0 之前)的图像验证规则中,他们没有为 mimes 列表数组添加“jpg”。这就是为什么我无法上传 jpg 文件的原因。然而,“jpg”出现在 Laravel 版本 7 的 mimes 列表中。
/**
* 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']);
}
/**
* 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 版本时,也会出现一些兼容问题,而且我们不应该更改供应商文件夹中的内容,因为在下一次作曲家更新时它会覆盖或清除更改?
推荐阅读
- qt - 在 QML 中将多个矩形绘制到图像中
- python - Python中Docx文件的加密
- reactjs - 在 react componentWillUnmount 中取消组件导入
- html - 两个带有背景图像的独立元素 - 我需要两个背景都在两个元素后面
- c++ - 可视化代码 C++:ros 和智能感知
- mysql - clickhouse 数组查询
- r - Plotly - 第二个 y 轴颜色
- c# - 如何在 Convert.TryFromBase64String() 中使用 Span?
- angular - 从 TimerObservable 取消订阅不会停止正在执行的订阅回调
- python - Python-即使出现错误,如何继续我的测试脚本