SpringBoot + thymeleaf 实现文件下载


SpringBoot文件下载

1.项目结构

2.FileController.java

package xin.baizhiedu.controller;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.util.FileCopyUtils;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileInputStream;
import java.net.URLEncoder;

@Controller
@RequestMapping("/file")
public class FileController {

    private static final Logger log = LoggerFactory.getLogger(FileController.class);

    @Value("${file.download.dir}")
    private String realPath;

    /**
     * 文件下载
     * @param fileName
     */
    @RequestMapping("/download")
    public void downloadFile(String fileName, HttpServletResponse response) throws Exception {
        log.debug("当前下载的文件名是:{}", fileName);
        log.debug("当前下载的文件的目录是:{}", realPath);
        // 1.去指定目录读取文件
        File file = new File(realPath, fileName);
        // 2.将文件读取为文件输入流
        FileInputStream is = new FileInputStream(file);
        // 2.1 获取响应流之前  一定要设置以附件形式下载
        response.setHeader("content-disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
        // 3.获取响应输出流
        ServletOutputStream os = response.getOutputStream();
        // 4.输入流复制给输出流

        /*int len = 0;
        byte[] buff = new byte[1024];
        while (true) {
            len = is.read(buff);
            if (len==-1) break;
            os.write(buff, 0, len);
        }*/

        // 5.释放资源
        /*os.close();
        is.close();*/

        FileCopyUtils.copy(is,os);

    }

}

3.index.html

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>index</title>
</head>
<body>
<h1>Hello index !</h1>
<h1>测试文件下载</h1> <br/>
<a th:href="@{/file/download(fileName=HELP.md)}">HELP.md</a> <br/>
<!--<a th:href="@{/file/download?fileName=readme.txt}">readme.txt</a> <br/>-->
<a th:href="@{/file/download(fileName=readme.txt)}">readme.txt</a> <br/>
<!--<a th:href="@{/file/download?fileName=项目介绍.md}">项目介绍.md</a> <br/>-->
<a th:href="@{/file/download(fileName=项目介绍.md)}">项目介绍.md</a> <br/>
</body>
</body>
</html>

4.application.yml

server:
  port: 8080
#  servlet:
#    context-path: /springboot_day06


logging:
  level:
    root: info
    xin.baizhiedu.controller: debug

file:
  download:
    dir: D:\IntelliJ IDEA 202101Projects\SpringBoot-Baizhiedu\springboot_day06-download\download  # 指定下载目录测试环境
    # /home/download  # 指定上线环境的目录

5.pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.5.0</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <groupId>xin.baizhiedu</groupId>
    <artifactId>springboot_day06-download</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>springboot_day06-download</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

6.测试




免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM