Изображение должно быть изображением и типом файла: jpg, jpeg. Я получаю эти сообщения об ошибках, даже если я загружаю действительный файл jpg или jpeg. Я пытаюсь обновить изображение профиля пользователя, столбец уже существует, но он может обнуляться всякий раз, когда они входят в систему.
Теперь я пытаюсь обновить поле изображения профиля и некоторые другие поля. Другие поля работают, но когда я пытался обновить изображение, я получаю сообщение об ошибке, например «Картинка должна быть изображением» или «Картинка должна быть файлом типа: jpg, jpeg».
Изначально я использовал метод jquery onChange, чтобы получать ввод файла всякий раз, когда он изменяется, затем я обрезал его с помощью this.value.replace(/^C:\\fakepath\\/i, '')
, затем я передал это усеченное значение в свою функцию ajax в качестве данных
Обрезка входного файла, изначально он пустой .. но я обрезаю его всякий раз, когда он меняется
var path = '';
$('.file').on("change", function(){
path = this.value.replace(/^C:\\fakepath\\/i, '');
$('#fake_btn').text(path);
});
тогда я передаю его своему Ajax
$.ajax({
async: true,
url: "/user/update_profile",
method: 'POST',
data: { picture:path,about: $('#about').val(),fb: $('#facebook').val(),tw: $('#twitter').val(),ln: $('#linkendin').val() },
success:function(data){
if(data['errors']){
const ex = data.errors;
$('.warning').html('');
$('.alert-message').hide();
$.each(ex,function(key,value){
$('.alert-message').show();
$('.warning').append('<p>'+value+'</p>');
});
}else{
$('.warning').html('');
$('.alert-message').hide();
$('.alert-success').fadeIn();
$('.success').html(data.message);
}
$('#update-profile').html('Update');
$('#update-profile').hide();
$('#loader-icon').fadeOut();
}
});
Вот как выглядит мой контроллер
public function update(Request $request){
$image = "";
$attribute = Validator::make($request->all(),[
'picture' => 'image|mimes:jpg,jpeg|max:2048|nullable',
'about' => 'min:20',
'fb' => 'min:20|nullable',
'tw' => 'min:20|nullable',
'ln' => 'min:20|nullable'
]);
if($attribute->fails()){
$error = array('errors'=>$attribute->errors());
return Response()->json($error);
}
if(empty($request->picture)){
$image = 'Null';
}else{
$image = $request->picture;
$image = rand() . '.' . $image->getClientOriginalExtension();
$image->move(public_path('user_images'), $image);
}
$user = User::find(Auth::user()->id);
$user->about = $request->about;
$user->image = $image;
$user->save();
$fb = empty($request->fb) ? 'Null' : $request->fb;
$tw = empty($request->tw) ? 'Null' : $request->tw;
$ln = empty($request->ln) ? 'Null' : $request->ln;
$userSocialExist = Social::usersocialExist(Auth::user()->id);
if($userSocialExist){
$social = Social::where([
['user_id', Auth::user()->id]
])->update(['facebook' => $fb,'twitter' => $tw,'linkendin'=>$ln]);
$data = array('message'=>'social updated!');
return Response()->json($data);
}else{
$social = new Social();
$social->user_id = Auth::user()->id;
$social->facebook = $fb;
$social->twitter = $tw;
$social->linkendin = $ln;
$social->save();
$data = array('message'=>'social created!');
return Response()->json($data);
}
Обратите внимание, что я обновляю ссылки на социальные сети пользователя на той же странице, но это хорошо работает, когда обновляются только ссылки на социальные сети. Я получаю эти сообщения об ошибках только при попытке обновить изображение.