通过 inertiajs form.post 上传的图像在 Laravel 8 中未通过 mime 图像验证
Image uploaded through inertiajs form.post fails mime image validation in Laravel 8
Laravel版本:8.82.0
我正在通过使用 form.post
方法发出 post 请求来使用 inertiajs 上传图像。控制器接收到图像数据,如下图所示:
我的简化控制器:
public function store(){
Request()->validate([
'thumbnail' => 'required|mimes:png,jpeg,jpg|max:2048'
// Also tried, still fails.
// 'thumbnail' => 'required|image|mimes:png,jpeg,jpg|max:2048'
]);
return Redirect::route('showcases.index');
}
到达header后content-type为application/json
,我尝试将其更改为multipart/form-data
但无济于事,图像验证仍然失败。
我得到的错误是:The thumbnail must be a file of type: png, jpeg, jpg
您正在尝试验证 base64 字符串而不是文件。
在字符串格式中 laravel 验证无法验证 MIME 类型。
所以你可以尝试扩展验证规则并尝试更好的方法。
在 AppServiceProvider
中放置自定义验证(还有许多其他更简洁的方法)
public function boot()
{
Validator::extend('image64', function ($attribute, $value, $parameters, $validator) {
$type = explode('/', explode(':', substr($value, 0, strpos($value, ';')))[1])[1];
if (in_array($type, $parameters)) {
return true;
}
return false;
});
Validator::replacer('image64', function($message, $attribute, $rule, $parameters) {
return str_replace(':values',join(",",$parameters),$message);
});
}
现在你可以做 :
'thumbnail' => 'required|image64:jpeg,jpg,png'
Laravel版本:8.82.0
我正在通过使用 form.post
方法发出 post 请求来使用 inertiajs 上传图像。控制器接收到图像数据,如下图所示:
我的简化控制器:
public function store(){
Request()->validate([
'thumbnail' => 'required|mimes:png,jpeg,jpg|max:2048'
// Also tried, still fails.
// 'thumbnail' => 'required|image|mimes:png,jpeg,jpg|max:2048'
]);
return Redirect::route('showcases.index');
}
到达header后content-type为application/json
,我尝试将其更改为multipart/form-data
但无济于事,图像验证仍然失败。
我得到的错误是:The thumbnail must be a file of type: png, jpeg, jpg
您正在尝试验证 base64 字符串而不是文件。
在字符串格式中 laravel 验证无法验证 MIME 类型。
所以你可以尝试扩展验证规则并尝试更好的方法。
在 AppServiceProvider
中放置自定义验证(还有许多其他更简洁的方法)
public function boot()
{
Validator::extend('image64', function ($attribute, $value, $parameters, $validator) {
$type = explode('/', explode(':', substr($value, 0, strpos($value, ';')))[1])[1];
if (in_array($type, $parameters)) {
return true;
}
return false;
});
Validator::replacer('image64', function($message, $attribute, $rule, $parameters) {
return str_replace(':values',join(",",$parameters),$message);
});
}
现在你可以做 :
'thumbnail' => 'required|image64:jpeg,jpg,png'