教程代码中有个大 bug 大家注意下
如果上传的文件后缀名不为['png', 'jpg', 'gif', 'jpeg'] 其中的一个的话, 新上传图片的临时地址就会覆盖原图片的地址。
public function update(UserRequest $request, ImageUploadHandler $uploader, User $user)
{
$data = $request->all(); // 这里如果上传的文件的后缀名是a.sql文件的话,然后 $data['avatar']的地址是/tmp/phpl2HAdX
if ($request->avatar) {
$result = $uploader->save($request->avatar, 'avatars', $user->id);
if ($result) {
$data['avatar'] = $result['path'];
}
}
$user->update($data); // 然后这里就覆盖了原图片地址了。
return redirect()->route('users.show', $user->id)->with('success', '个人资料更新成功!');
}
我认为下面的代码才是正确的代码
public function update(UserRequest $request, ImageUploadHandler $uploader, User $user){
$data = $request->all();
//dd($data);
if($request->avatar){
$result = $uploader->save($request->avatar, 'avatars', $user->id);
if($result){
$data['avatar'] = $result['path'];
}else{
//上传有错误 withErrors可以携带回错误信
return back()->withErrors(['上传图片格式只支持png, jpg, gif, jpeg这四种格式']);
}
}
$user->update($data);
return redirect()->route('users.show', $user->id)->with('success', '个人资料更新成功');
}
还可以通过前端对上传的文件后缀进行控制
<input type="file" name="avatar" class="form-control-file" accept="image/png,image/gif,image/jpeg,image/jpeg">
看到后面章节发现作者对UserRequest 请求的文件参数的后缀进行了限制
感谢,解决了我的疑惑
其实这里应该使用
验证器
来处理,在不符合条件的时候拒绝请求,不应该上传临时文件