美文网首页java高级开发群青春校园Java
Spring Boot 教程 - 文件上传下载

Spring Boot 教程 - 文件上传下载

作者: Java斗帝之路 | 来源:发表于2020-08-17 14:03 被阅读0次

    在日常的开发工作中,基本上每个项目都会有各种文件的上传和下载,大多数文件都是excel文件,操作excel的JavaAPI我用的是apache的POI进行操作的,POI我之后会专门讲到。此次我们不讲如何操作文件,只讲如何上传文件和下载文件。

    1. 文件的上传

    在现在的JavaWeb项目中,与前端进行交互的基本都是SpringMVC框架。Spring专门提供了一个接口MultipartFile,这个接口帮我们简化了从页面到服务端的文件操作,以前我们只能从request里面拿,现在有了这个接口,我们操作起来就会很简单。话不多说,直接上代码。

    我们只是模拟文件上传的操作,所以我们从页面上传文件,然后存到电脑桌面。

    @RequestMapping("/upload")

    publicvoidupload(MultipartFile file)throwsIOException{

    init(file,1);

    }

    @RequestMapping("/uploads")

    publicvoiduploads(MultipartFile[] files, DTO dto)throwsIOException{

    for(inti =0; i < files.length; i++) {

    init(files[i], i);

    }

    System.out.println(dto.getParam());

    }

    /**

        * 下载文件初始化

    *@paramfile 文件

    *@parami 为了区别文件,防止被覆盖

    *@throwsIOException

        */

    privatevoidinit(MultipartFile file,inti)throwsIOException{

    String filename = file.getOriginalFilename();

    OutputStream os =newFileOutputStream(newFile("C:\\Users\\WJF\\Desktop"+ File.separator + i + filename));

    InputStream is = file.getInputStream();

    StreamUtils.copy(is, os);

    is.close();

    os.close();

    }

    上面的代码中,不管是单个文件还是多文件都是很简单的,还可以带其他参数DTO。

    2. 文件的下载

    文件的下载也是很简单的,但是Response头如果没有设置好,就可能下载失败,下载下来也可能是乱码的。但是这些头设置其实很简单,但是每次下载文件的时候都要这么设置一下,其实是很繁琐的,所以在这里我使用了已经封装好的下载API,直接上代码。

    首先我们引入jar包:

    <!--springboot父工程-->

    org.springframework.boot

    spring-boot-starter-parent

    2.2.2.RELEASE

    <!-- lookup parent from repository -->

    <!--springboot框架web组件-->

    org.springframework.boot

    spring-boot-starter-web

    <!--wjf-download下载小框架,用来简化下载的无味繁琐的操作-->

    red.wjf

    wjf-download

    0.1.0.RELEASE

    在这里我引入了一个下载的jar包,这个包可以在maven中央仓库直接找到的。这个下载文件jar包的官网地址:传送门

    在下载文件之前我们需要配置一下,创建一个下载器,将下载器交给Spring管理:

    DownloadConfig.java:

    packagecom.butterflytri.config;

    importorg.springframework.context.annotation.Bean;

    importorg.springframework.context.annotation.Configuration;

    importred.wjf.download.downloader.ImageDownloader;

    importred.wjf.download.downloader.WebDownloader;

    /**

    * @author: WJF

    * @date: 2020/7/29

    * @description:  DownloadConfig

    */

    @Configuration

    publicclass DownloadConfig {

    @Bean

    public WebDownloader webDownloader() {

    returnnewWebDownloader();

    }

    @Bean

    public ImageDownloader imageDownloader() {

    returnnewImageDownloader();

    }

    }

    在这里我们创建了两个下载器,都交给了Spring框架管理。

    @RequestMapping("/downloadTest")

    publicvoiddownload01(HttpServletRequest request, HttpServletResponse response, String fileName){

    InputStreamis=this.getClass().getClassLoader().getResourceAsStream("test.docx");

    try{

    DataWriter writer =newDataWriter(is);

    webDownloader.defaultDownload(request, response, fileName, writer);

    }catch(IOException e) {

    e.printStackTrace();

    }

    }

    @RequestMapping("/downloadImg")

    publicvoiddownloadImg(HttpServletRequest request, HttpServletResponse response){

    InputStreamis=this.getClass().getClassLoader().getResourceAsStream("img.jpg");

    ImageWriter writer =newImageWriter(is, ImgSuffix.JPG);

    imageDownloader.defaultDownload(request, response, writer);

    }

    这两个文件(test.docx和img.jpg)都在类路径下,从浏览器页面调用方法,就会下载,不会乱码也不会下载失败,除非文件不存在。jar包还提供了图片的Base64格式下载。在国内我们只需要调用这个默认的下载方法就可以了。下载的演示我就不演示了,大家可以拉下我的代码看看,觉得我写的东西对你有用,也可以给我点个赞哦。

    3. 项目地址

    本项目传送门:

    GitHub ---> spring-upload-download

    Gitee ---> spring-upload-download

    相关文章

      网友评论

        本文标题:Spring Boot 教程 - 文件上传下载

        本文链接:https://www.haomeiwen.com/subject/wshqjktx.html