Springboot+Springmvc实现文件的上传和下载(附源码)

在系统中实现文件上传下载的方式挺多,比如通过IO流的方式,通过springmvc的方式等等。综合比较,后一种性能更高。今天我们就在springboot环境中来实现一下。

文件上传

第一步:新建一个springboot项目。
Springboot+Springmvc实现文件的上传和下载(附源码)_第1张图片

第二步:新建FileController、SpringmvcfileApplication、upload.jsp文件,保证文件路径如下。
Springboot+Springmvc实现文件的上传和下载(附源码)_第2张图片
第三步:在pom文件中添加依赖。

  
        
            org.springframework.boot
            spring-boot-starter
        
        
            org.springframework.boot
            spring-boot-starter-test
            test
        
        
        
            org.springframework.boot
            spring-boot-starter-web
        
        
        
            javax.servlet
            jstl
        
        
            org.apache.tomcat.embed
            tomcat-embed-jasper
            
        
    

第四步:编写Controller文件。其中“String filePath”处需要填写一个本机存在路径,否则会报路径错误。

package com.example.springmvcfile;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;

import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
import java.util.List;

@Controller
public class FileController {
    private static final Logger LOGGER = LoggerFactory.getLogger(FileController.class);

    @GetMapping("/upload")
    public String upload() {
        return "upload";
    }
    
    @PostMapping("/upload")
    @ResponseBody
    public String upload(@RequestParam("file") MultipartFile file) {
        if (file.isEmpty()) {
            return "上传失败,请选择文件";
        }
        String fileName = file.getOriginalFilename();
        // 这需要填写一个本地路径
        String filePath ="E://springmvcfile//";
        File dest = new File(filePath + fileName);
        try {
            file.transferTo(dest);
            LOGGER.info("上传成功");
            return "上传成功";
        } catch (IOException e) {
            LOGGER.error(e.toString(), e);
        }
        return "上传失败!";
    }
}

第五步:保证启动类文件SpringmvcfileApplication不变。

@SpringBootApplication
public class SpringmvcfileApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpringmvcfileApplication.class, args);
    }
}

第六步:在application.properties文件中添加如下属性。

# 上传文件总的最大值
spring.servlet.multipart.max-request-size=10MB
# 单个文件的最大值
spring.servlet.multipart.max-file-size=10MB

## jsp
spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp

第七步:编写upload.jsp文件。

<%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" %>



    
    
    单文件上传



第八步:运行main方法,在浏览器中访问对应路径,测试是否成功。
Springboot+Springmvc实现文件的上传和下载(附源码)_第3张图片
选择文件上传成功后,去对应本机路径中查看上传的文件。
Springboot+Springmvc实现文件的上传和下载(附源码)_第4张图片

文件下载

文件下载的实现和上传大同小异,只需在原来的文件中修改2处即可。
第一步:在Controller层添加如下代码。

@RequestMapping(value = "/download", method = RequestMethod.GET)
public ResponseEntity downloadFile() throws FileNotFoundException {
    //String fileName = "C:/Users/wds/Desktop/test.txt";
    String fileName = "E:/springmvcfile/1.jpg";
    File file = new File(fileName);
    InputStreamResource resource = new InputStreamResource(new FileInputStream((file)));

     HttpHeaders headers = new HttpHeaders();
     headers.add("Content-Disposition",String.format("attachment;filename=\"%s\"",file.getName()));
     headers.add("Cache-Control","no-cache,no-store,must-revalidate");
     headers.add("Pragma","no-cache");
     headers.add("Expires","0");

     ResponseEntity responseEntity = ResponseEntity.ok()
                                            .headers(headers)
                                            .contentLength(file.length())
                                            .contentType(MediaType.parseMediaType("application/text"))
                                            .body(resource);
      return responseEntity;
    }
 
  

第二步:在jsp文件中添加如下代码。

下载

第三步:进行测试。
Springboot+Springmvc实现文件的上传和下载(附源码)_第5张图片
我们可以看到,在路径下有两张图片,现在我要把1.jpg下载下来。
Springboot+Springmvc实现文件的上传和下载(附源码)_第6张图片

小结

源码地址:
链接:https://pan.baidu.com/s/14tbBX6AmVAuMeKQX1FcvZg
提取码:e8wb

你可能感兴趣的:(•,高级,——【框架】)