欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Springboot如何通過流返回文件

 更新時(shí)間:2022年03月18日 09:43:49   作者:一個(gè)想努力學(xué)技術(shù)的程序員  
這篇文章主要介紹了Springboot如何通過流返回文件,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

如何通過流返回文件

本人的文件是放在resource/templates目錄下,截圖如下

controller類如下

    @GetMapping(value = "/downfile")
    public void download(HttpServletResponse response) throws IOException {
        String fileName = "template.xlsx";
        // 設(shè)置信息給客戶端不解析
        String type = new MimetypesFileTypeMap().getContentType(fileName);
        // 設(shè)置contenttype,即告訴客戶端所發(fā)送的數(shù)據(jù)屬于什么類型
        response.setHeader("Content-type",type);
        // 設(shè)置編碼
        String code = new String(fileName.getBytes("utf-8"), "iso-8859-1");
        // 設(shè)置擴(kuò)展頭,當(dāng)Content-Type 的類型為要下載的類型時(shí) , 這個(gè)信息頭會(huì)告訴瀏覽器這個(gè)文件的名字和類型。
        response.setHeader("Content-Disposition", "attachment;filename=" + code);
        response.setContentType("application/octet-stream;charset=ISO8859-1");
        response.addHeader("Pargam", "no-cache");
        response.addHeader("Cache-Control", "no-cache");
        DownLoadUtils.download(fileName, response);
    }

工具類DownLoadUtils如下

public class DownLoadUtils { 
    public static void download(String filename, HttpServletResponse res) throws IOException {
        // 發(fā)送給客戶端的數(shù)據(jù)
        // 讀取filename
        ClassPathResource classPathResource = new ClassPathResource("templates/"+filename);
        long length = classPathResource.getFile().length();
        res.addHeader("Content-Length",String.valueOf(length));
        OutputStream outputStream = res.getOutputStream();
        byte[] buff = new byte[1024];
        BufferedInputStream bis = null;
        InputStream inputStream =classPathResource.getInputStream();
        bis = new BufferedInputStream(inputStream);
        int i = bis.read(buff);
        while (i != -1) {
            outputStream.write(buff, 0, buff.length);
            outputStream.flush();
            i = bis.read(buff);
        }
        bis.close();
        outputStream.close();
    }
}

注意點(diǎn)

response.addHeader("Content-Length",String.valueOf(file.length()));

如果不加這句代碼,下載下來(lái)的文件會(huì) 在打開前提示修復(fù),文件格式或文件擴(kuò)展名無(wú)效。請(qǐng)確定文件未損壞,并且文件擴(kuò)展名與文件的格式匹配

以流的方式直接返回

import java.io.FileReader;
import java.io.InputStream;
import java.util.Properties;
/*
 */
public class Reflect {
    public static void main(String[] args) throws Exception{
       //獲取一個(gè)文件的絕對(duì)路徑?。?!
        // 這種是先獲得絕對(duì)路徑然后在轉(zhuǎn)換成流。
//        String path = Thread.currentThread().getContextClassLoader()
//                .getResource("classinfo2.properties").getPath();
//        FileReader reader = new FileReader(path);
        //下面這種是直接用流的方式返回。
        InputStream reader = Thread.currentThread().getContextClassLoader()
                .getResourceAsStream("classinfo2.properties");
        Properties pro = new Properties();
        pro.load(reader);
        reader.close();
        //通過key獲取value。
        String className = pro.getProperty("className");
        System.out.println(className);
    }
}

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。 

相關(guān)文章

  • No ‘Access-Control-Allow-Origin‘ header is present跨域及解決

    No ‘Access-Control-Allow-Origin‘ header is&nb

    這篇文章主要介紹了No ‘Access-Control-Allow-Origin‘ header is present跨域及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • mybaties plus實(shí)體類設(shè)置typeHandler不生效的解決

    mybaties plus實(shí)體類設(shè)置typeHandler不生效的解決

    這篇文章主要介紹了mybaties plus實(shí)體類設(shè)置typeHandler不生效的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • Spring AOP使用之多切面運(yùn)行順序

    Spring AOP使用之多切面運(yùn)行順序

    這篇文章主要介紹了Spring AOP使用之多切面運(yùn)行順序,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • Java Arrays.sort()用法詳解

    Java Arrays.sort()用法詳解

    這篇文章主要介紹了Java Arrays.sort()用法詳解,本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • Java構(gòu)造方法實(shí)例詳解(動(dòng)力節(jié)點(diǎn)java學(xué)院整理)

    Java構(gòu)造方法實(shí)例詳解(動(dòng)力節(jié)點(diǎn)java學(xué)院整理)

    其實(shí)java構(gòu)造方法很簡(jiǎn)單,下面通過示例給大家分享java構(gòu)造方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下
    2017-04-04
  • SpringBoot中Zookeeper分布式鎖的原理和用法詳解

    SpringBoot中Zookeeper分布式鎖的原理和用法詳解

    Zookeeper是一個(gè)分布式協(xié)調(diào)服務(wù),它提供了高可用、高性能、可擴(kuò)展的分布式鎖機(jī)制,SpringBoot是一個(gè)基于Spring框架的開發(fā)框架,它提供了對(duì)Zookeeper分布式鎖的集成支持,本文將介紹SpringBoot中的 Zookeeper分布式鎖的原理和使用方法,需要的朋友可以參考下
    2023-07-07
  • SpringBoot中的事務(wù)全方位詳解

    SpringBoot中的事務(wù)全方位詳解

    這篇文章主要介紹了SpringBoot中的事務(wù)全方位詳解,在Spring中,事務(wù)有兩種實(shí)現(xiàn)方式,分別是編程式事務(wù)管理和聲明式事務(wù)管理兩種方式,文中舉例詳細(xì)說明了這兩種事務(wù),需要的朋友可以參考下
    2023-08-08
  • mybatis中的limit參數(shù)解讀

    mybatis中的limit參數(shù)解讀

    這篇文章主要介紹了mybatis中的limit參數(shù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • 通過實(shí)例了解Java Integer類和int的區(qū)別

    通過實(shí)例了解Java Integer類和int的區(qū)別

    這篇文章主要介紹了通過實(shí)例了解Java Integer類和int的區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • SpringBoot中配置log4j2日志詳解

    SpringBoot中配置log4j2日志詳解

    這篇文章主要介紹了SpringBoot中配置log4j2日志詳解,Apache Log4j2 是對(duì)原先的 Log4j 項(xiàng)目的升級(jí)版本,參考了 logback 的一些優(yōu)秀的設(shè)計(jì),并且修復(fù)了一些問題,因此帶來(lái)了一些重大的提升,需要的朋友可以參考下
    2023-11-11

最新評(píng)論