帮我看一下这个,小可爱们

这个是我的controller代码:

public static final int AVATAR_MAX_SIZE=10 * 1024 * 1024;

    /**
     * 限制上传文件的类型
     */
    public static final List<String> AVATAR_TYPE=new ArrayList<>();
    static {
        AVATAR_TYPE.add("image/jpeg");
        AVATAR_TYPE.add("image/png");
        AVATAR_TYPE.add("image/bmp");
        AVATAR_TYPE.add("image/gif");
    }

    /**
     * MultipartFile接口是SpringMVC提供的一个接口,这个接口为我们包装了获取文件类型的数据
     * (任何类型的file都可以接收),SpringBoot它又整合了SpringMVC,只需要在处理请求的方法
     *  参数列表上声明一个参数类型为MultipartFile的参数,然后SpringBoot自动将的传递服务的文件数据复制给这个参数
     *
     *  @RequestParam这个注解表示请求中的参数,将请求中的参数注入请求处理方法的某个参数上,
     *    如果名称不一致则可以使用@RequestParam注解进行标记和映射
     * @param session
     * @param file
     * @return
     */
    @RequestMapping("change_avatar")
    public JsonResult<String> changeAvatar( @RequestParam(value = "file") MultipartFile file,
                                           HttpSession session){
        //判断文件是否为null
        if (file.isEmpty()){
            throw new FileEmptyException("文件为空");
        }
        if (file.getSize() > AVATAR_MAX_SIZE){
            throw new FileSizeException("文件超出限制");
        }
        //判断文件类型是否是我们规定的后缀类型
        String contentType = file.getContentType();
        //如果集合包含某个元素则返回true
        if (!AVATAR_TYPE.contains(contentType)){
            throw  new FileTypeException("文件类型不支持");
        }
        //上传的文件.../upload/文件.png
        String parent=session.getServletContext().getRealPath("upload");
        //File对象指向这个路径,File是否存在
        File dir=new File(parent);
        if (!dir.exists()){   //检测目录是否存在
            dir.mkdirs();    //创建当前的目录
        }
        //获取这个文件名称,UUID工具来将生成一个新的字符串作为文件名
        //例如:avatar01.png
        String originalFilename=file.getOriginalFilename();
        System.out.println("OriginalFilename="+originalFilename);
        int index=originalFilename.lastIndexOf(".");
        String suffix=originalFilename.substring(index);
        //
        String filename= UUID.randomUUID().toString().toUpperCase()+suffix;
        File dest=new File(dir,filename);  //是一个空文件
        //参数file中的数据写入到这个空文件中
        try {
            file.transferTo(dest); //将file文件中的数据写入到dest文件
        } catch (FileStateException e) {
            throw new FileStateException("文件状态异常");
        } catch (IOException e) {
           throw new FileUploadIOException("文件读写异常");
        }
        Integer uid =getuidFromSession(session);
        String username = getUsernameFromSession(session);
        //返回头像的路径/upload/test.png
        String avatar="/upload/"+filename;
        userService.changeAvatar(uid,avatar,username);
        //返回用户头像的路径给前端页面,将来用于头像展示使用
        return new JsonResult<>(OK,avatar);
    }

<div class="modal fade" id="avatar-modal" aria-hidden="true" aria-labelledby="avatar-modal-label" role="dialog" tabindex="-1">
        <div class="modal-dialog modal-lg">
            <div class="modal-content">
                <!-- {%url('admin/upload-logo')%} -->
                <form enctype="multipart/form-data" class="avatar-form" action="/user/change_avatar"  method="post" id="form-change-avatar">
                    <div class="modal-header">
                        <button class="close" data-dismiss="modal" type="button">&times;</button>
                        <h4 class="modal-title" id="avatar-modal-label">Change Logo Picture</h4>
                    </div>
                    <div class="modal-body">
                        <div class="avatar-body">
                            <div class="avatar-upload">
                                <input class="avatar-src" name="avatar_src" type="hidden">
                                <input class="avatar-data" name="avatar_data" type="hidden">
                                <label for="avatarInput">图片上传</label>
                                <input class="avatar-input" id="avatarInput" name="file" type="file"></div>
                            <div class="row">
                                <div class="col-md-9">
                                    <div class="avatar-wrapper"></div>
                                </div>
                                <div class="col-md-3">
                                    <div class="avatar-preview preview-lg"></div>
                                    <div class="avatar-preview preview-md"></div>
                                    <div class="avatar-preview preview-sm"></div>
                                </div>
                            </div>
                            <div class="row avatar-btns">
                                <div class="col-md-9">
                                    <div class="btn-group">
                                        <button class="btn" data-method="rotate" data-option="-90" type="button" title="Rotate -90 degrees"><i class="fa fa-undo"></i> 向左旋转</button>
                                    </div>
                                    <div class="btn-group">
                                        <button class="btn" data-method="rotate" data-option="90" type="button" title="Rotate 90 degrees"><i class="fa fa-repeat"></i> 向右旋转</button>
                                    </div>
                                </div>
                                <div class="col-md-3">
                                    <button class="btn btn-success btn-block avatar-save" type="button" id="btn-change-avatar"><i class="fa fa-save"></i> 上传</button>
                                </div>
                            </div>
                        </div>
                    </div>
                </form>
            </div>
        </div>
    </div>
    <div class="loading" aria-label="Loading" role="img" tabindex="-1"></div>


运行结果

img

接口参数中, @RequestParam(value = "file") 去掉试试。
https://blog.csdn.net/u013168084/article/details/107911335?utm_source=app&app_version=4.18.0

你这个是Post请求提交,后端方法最好声明一下post请求

img


比如 @RequestMapping("change_avatar")改成 @PostMapping("change_avatar")
或者@RequestMapping(method = RequestMethod.POST, path = "/change_avatar")