Spring Boot 使用Ajax上传下载文件,配置文件访问路径

1.使用jquery Ajax上传文件

我这里的需求是这样的,上传一个excel,根据上传的excel,进行处理创建新的excel下载给用户。

先贴代码 前端

第几个sheet 可以多个英文逗号隔开 每个sheet的第几列 多个竖杠隔开

js ajax上传文件使用FormData 对象
var formData = new FormData(); 设置processData: falsecontentType: false



function upload() {
        var formData = new FormData();
        formData.append("file", $("#upload")[0].files[0]);
        formData.append("sheetIndex",$("#sheetIndex").val());
        formData.append("sheetHeadIndex",$("#sheetHeadIndex").val());

        $.ajax({
            type: 'post',
            url: "/upload/do",
            data: formData,
            //必须要加这两个 大概作用是 禁用ajax的数据类型转换 上传文件用Content-Type: multipart/form-data;
            processData: false,
            contentType: false,
            success:(function (data) {
                //这里是返回url 直接创建a标签点击下载文件
                console.log(data)
                var a = document.createElement("a");
                a.href = data;
                a.click();
            }),
            error:(function () {
                alert("上传失败");
            })
        });
    }

2.使用springboot 后台接收数据

配置静态文件路径

spring.mvc.static-path-pattern 设置拦截请求 /** 表示所有请求 /static/* 表示拦截路径static下的所有请求
spring.resources.static-locations 设置拦截的请求映射的具体路径 可以多个 逗号隔开

下面代码表示 拦截所有请求,去找对应classpath:/ (根目录),classpath:/static/ static文件下
file:${web.file.path} 指定web.file.path=D:/upFiles/目录下
注意:window绝对路径要加 file:

web.file.path=D:/upFiles/
spring.mvc.static-path-pattern=/**
spring.resources.static-locations=classpath:/,classpath:/static/,file:${web.file.path}

下面代码接收到数据 存储到指定文件夹下

   @Value("${web.file.path}")
    private String path;


    @RequestMapping("/do")
    @ResponseBody
    public String uploadDutyExcel(HttpServletRequest request, HttpServletResponse response,
                                  @RequestParam("file") MultipartFile multfile,//使用这个对象接受文件
                                  @RequestParam("sheetIndex") String sheetIndex,
                                  @RequestParam("sheetHeadIndex") String sheetHeadIndex) throws Exception {
        // 获取文件名
        String fileName = multfile.getOriginalFilename();
        // 获取文件后缀
        String prefix=fileName.substring(fileName.lastIndexOf("."));

        File file = new File(path);
        if(!file.exists())file.mkdirs();
        // 用uuid作为文件名,防止生成的临时文件重复
        String uuid = UUID.randomUUID().toString().replaceAll("-", "");
        File excelFile = File.createTempFile(uuid,prefix, file);
        // MultipartFile to File
        multfile.transferTo(excelFile);

      //一顿操作后
      //一顿操作后
      //一顿操作后


      //返回文件路径
      return "/"+uuid+prefix;
}

技术有限 请多包含
技术有限 请多包含
技术有限 请多包含

你可能感兴趣的:(Spring Boot 使用Ajax上传下载文件,配置文件访问路径)