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