Spring Boot + ajax 异步多文件上传(混合表单)

自己的项目里要用到Springboot的多文件异步上传,而且是混合表单,找了好久都没找到好用的,今天终于找到了,趁着刚写完记录一下,免得以后自己需要的时候找不到,也给其他朋友一个方便

如果有不明白的可以问我,虽然我懂得也不懂,但是大家可以讨论讨论嘛

有错误的地方也请大家指正一下

由于我的业务中表单太长,字段太多,所以借鉴一下原文里的部分代码

**参考文章:ajax实现文件上传,多文件上传,追加参数

前端部分:

指定文件名:

上传文件:

上传文件:

上传文件:

//这里是为了做混合表单上传加的,不需要的可以忽略

姓名:

$("#uploadBtn").click(function () { var formData = new FormData(); formData.append("file1", $('#file1')[0].files[0]); formData.append("file2", $('#file2')[0].files[0]); formData.append("file3", $('#file3')[0].files[0]); formData.append("file1", file1); formData.append("file2", file2); formData.append("file3", file3); //将文本框的值追加在后面 formData.append("username", $("#username").val()); $.ajax({ url: '/applicant/addApplicant', //这里是我自己项目的URL dataType: 'json', type: 'post', contentType: false, //必须 processData: false, //必须 data: formData, success: function (data) { if(data>0){ alert("success") }else { alert("系统出错"); } } }); });

后台的Controller层:

    @ResponseBody
    @RequestMapping("/addApplicant")
    public int addApply(HttpServletRequest request) {
        MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
        
        // 这里是接收文件
        List file1 = multipartRequest.getFiles("file1");
        List file2 = multipartRequest.getFiles("file2");
        List file3 = multipartRequest.getFiles("file3");
    
        //这里用来获取其他非文件参数
        //但是我的表单特别长,字段很多,这样一个一个写好麻烦,如果哪位有好的方法分享一下
        String username = multipartRequest.getParameter("username");
      
      //下面是上传文件的方法,因为每个文件的上传都一样,所以我就只写一个了
        String fileName = file1.get(0).getOriginalFilename();
          if (!"".equals(fileName)) {
              String suffixName = fileName.substring(fileName.lastIndexOf("."));
              fileName = UUID.randomUUID() + suffixName;  //随机的新文件名 
          }
          
          String path = "D:\\gzf_boot\\src\\main\\resources\\static\\upload";   //我自己的路径
        
          //这个上传文件的工具类贴在下面
          FileUtils.upload(fileName, path, fileName);
            
        return 0;
    }

文件上传的工具类:

package org.wy.gzf_boot.util;

import org.springframework.web.multipart.MultipartFile;
import java.io.*;

/**
 * 文件上传工具包
 */
public class FileUtils {

    /**
     * @param file     文件
     * @param path     文件存放路径
     * @param fileName 源文件名
     * @return
     */
    public static boolean upload(MultipartFile file, String path, String fileName) {

        // 生成新的文件名
        //String realPath = path + "/" + FileNameUtils.getFileName(fileName);

        //使用原文件名
        String realPath = path + "/" + fileName;

        File dest = new File(realPath);

        //判断文件父目录是否存在
        if (!dest.getParentFile().exists()) {
            dest.getParentFile().mkdir();
        }

        try {
            //保存文件
            file.transferTo(dest);
            return true;
        } catch (IllegalStateException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            return false;
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            return false;
        }

    }

}

你可能感兴趣的:(技术分享)