Spring boot文件上传下载

Spring boot文件上传下载

文件上传

之前用SpringMVC的时候文件上传需要依赖与Apache Commons FilUpload的组件,需要额外导入两个jar包

  • commons-fileupload-1.3.2.jar
  • commons-io-2.5.jar

版本可以不一样。(别的配置这里就不说了)

但是Springboot内部web依赖spring-boot-starter-web已经为我们处理了这中间的步骤我们直接用MultipartFile实现文件上传功能就可以了。

package org.springframework.web.multipart;

...

public interface MultipartFile extends InputStreamSource {
   ...
}

这里就有给小问题了。如果在SpringBoot中,通过Maven或者各种方式你加了commons-fileupload的依赖。就会产生问题。

前端
<body>
    <div class="fileupload">
        <form class="formstyle" action="http://localhost:8080/upload" method="POST" enctype="multipart/form-data">
            <input type="file" name="file" multiple/>
            <input class="butto" type="submit" value="文件上传"/>
        </form>
    </div>
</body>
<style>
    .fileupload{
        height: 400px;
        widows: 100px;
        display: flex;
        justify-content: center;
        align-items: center;
    }
    .formstyle{
        display: flex;
        flex-direction: column;
    }
    .butto{
        margin-top: 20px;
        height: 30px;
        width: 35%;
        float: right;
    }
</style>
后端
@PostMapping("/upload")
    public String importRentInfo(MultipartFile file, HttpServletResponse response) throws IOException {

        String filename = file.getOriginalFilename();
        //     存在项目的某个目录下
        String pathName = System.getProperty("user.dir") + "/UploadFile/" + filename ;
        //     存在指定目录下  String pathName="C:/UploadFile/"+filename;
        Path path = Paths.get(pathName);
        //     判断路径是否存在如果不存在则创建对应文件夹
        if (!Files.isWritable(path)) {
            Files.createDirectories(Paths.get(System.getProperty("user.dir") + "/UploadFile"));
        //      Files.createDirectories(Paths.get("C:/LISBackupFile"));
        }
        try {
            Files.write(path, file.getBytes());//将文件存入本地
        }catch (Exception e){
            return "Error";
        }
        return "Success";
    }
 /**
  * 多文件
  * @param files
  * @param request
  * @return
  */
@PostMapping("/upload2")
    public String filerUpload(@RequestParam("file") List<MultipartFile> files, HttpServletRequest request){
        if(!files.isEmpty()&&files.size()>0){
            for(MultipartFile file:files){
                String path=request.getServletContext().getRealPath("/upload/");
                File file1=new File(path);
                if(!file1.exists()){
                    file1.mkdir();
                }
                String newFileName= UUID.randomUUID()+"_"+file.getOriginalFilename();
                try {
                    String pathName=path+newFileName;
                    System.out.println(pathName);
//C:\Users\AIERXUAN\AppData\Local\Temp\tomcatdocbase.4260699858668394207.8080\upload\6f85f392-7561-4fee-813f-f73120a87595_2019年大学生创新创业训练计划立项项目结题答辩的通知.docx
//C:\Users\AIERXUAN\AppData\Local\Temp\tomcatdocbase.4260699858668394207.8080\upload\15528784-ae2c-499f-950f-3ea76cf8c511_fileload.html
//通过打印的地址可以看出,上传的文件存在了tomcat的临时目录里。
                    file.transferTo(new File(pathName));
                }catch (Exception e){
                    //e.printStackTrace();
                    return "error";
                }
            }
            return "success";
        }
        return "fault";
    }

文件下载

前端
<body>
    <a href="http://127.0.0.1:8080/test">文件下载</a>
</body>
后端
 /**
  * 下载测试文件
  */
@GetMapping("/test")
public ResponseEntity<InputStream> downloadTestFile(HttpServletRequest request)throws Exception{
        return download(request,"下载测试.txt");
}

public ResponseEntity download(HttpServletRequest request, String filename)throws Exception{
    	//从项目目录下获取要下载的文件
        Resource resource=new ClassPathResource("static/"+filename);
    	//设置请求头
        HttpHeaders headers=new HttpHeaders();
    	//对文件名编码,防止中文文件乱码
        filename=this.getFilename(request,filename);
        headers.setContentDispositionFormData("attachment",filename);
        headers.setContentType(MediaType.parseMediaType("application/force-download"));
        return  ResponseEntity
                .ok()
                .headers(headers)
                .body(new InputStreamResource(resource.getInputStream()));
}
public String getFilename(HttpServletRequest request,String filename)throws Exception{
        String[] IEBrowserKeyWords={"MSIE","Trident","Edge"};
        String userAgent=request.getHeader("User-Agent");
        for(String keyWord:IEBrowserKeyWords){
            if(userAgent.contains(keyWord)){
                return URLEncoder.encode(filename,"UTF-8");
            }
        }
        return new String(filename.getBytes("UTF-8"),"ISO-8859-1");
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值