教程代码中有个大 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 请求的文件参数的后缀进行了限制

bug
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 2

感谢,解决了我的疑惑

4年前 评论

其实这里应该使用 验证器 来处理,在不符合条件的时候拒绝请求,不应该上传临时文件

3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!