1. 程式人生 > 其它 >SpringBoot實現文件下載

SpringBoot實現文件下載

技術標籤:SpringBoot框架

pom依賴:

<dependency>
	<groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>3.14</version>
</dependency>
<dependency>
	<groupId>org.apache.poi</groupId>
	<artifactId>poi-ooxml-schemas</
artifactId
>
<version>3.14</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>3.14</version> </dependency>

HTML5 程式碼:

<input type="button" onclick="downTemplate()"
value="下載模板" class="btn btn-primary"/>

JavaScript 程式碼:

<script type="text/javascript">
    var fileName = "學生資訊模板.xlsx";
    function downTemplate() {
        window.open("/admin/downTemplate?fileName="+fileName);
    }
</script>

service層程式碼:

@Override
    public void downTemplate(String fileName) throws IOException {
        ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        if (requestAttributes != null) {
            HttpServletResponse response = requestAttributes.getResponse();
            // 設定資訊給客戶端不解析
            String type = new MimetypesFileTypeMap().getContentType(fileName);
            if (response != null) {
                // 設定content-type,即告訴客戶端所傳送的資料屬於什麼型別
                response.setHeader("Content-type", type);
                // 設定編碼
                String code = new String(fileName.getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1);
                // 設定擴充套件頭,當Content-Type 的型別為要下載的型別時 , 這個資訊頭會告訴瀏覽器這個檔案的名字和型別。
                response.setHeader("Content-Disposition", "attachment;filename=" + code);
                FileUtil.download(fileName, response);
            }
        }
    }

controller層程式碼:

@GetMapping("/downTemplate")
    public String downTemplate(@RequestParam("fileName") String fileName){
        try {
            studentService.downTemplate(fileName);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

工具包:

public class FileUtil {

    public static void download(String fileName, HttpServletResponse response) throws IOException {
        // 傳送給客戶端的資料
        OutputStream outputStream = response.getOutputStream();
        byte[] buff = new byte[1024];
        BufferedInputStream bis = null;
        // 讀取fileName
        bis = new BufferedInputStream(new FileInputStream(new File("./file/" + fileName)));
        int i = bis.read(buff);
        while (i != -1) {
            outputStream.write(buff, 0, buff.length);
            outputStream.flush();
            i = bis.read(buff);
        }
    }
}

模板儲存位置

在這裡插入圖片描述