最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JAVA返回PDF文件流并進行下載的實現(xiàn)方法

 更新時間:2024年02月03日 11:52:00   作者:itHarvie  
這篇文章主要給大家介紹了關(guān)于JAVA返回PDF文件流并進行下載的實現(xiàn)方法,PDF文件流下載是通過HTTP協(xié)議將服務器上的PDF文件以流的方式發(fā)送給客戶端,供客戶端保存到本地磁盤或直接在瀏覽器中打開,需要的朋友可以參考下

首先確保本地存放pdf 保證通過路徑可以拿到文件 我這邊把pdf放在e盤下的目錄

1.前臺方法

原生ajax 發(fā)送請求返回文件流進行下載

 function downloadPdf() {
        //后臺下載文件流地址 (自己定義)
        let url = prefix + "/result";
        let xhr = new XMLHttpRequest();
        xhr.open('GET', url, true);
        xhr.setRequestHeader("content-type", "application/x-www-form-urlencoded");
        xhr.responseType = 'blob'; //返回類型blob
        //定義請求完成的處理函數(shù),請求前也可以增加加載框/禁用下載按鈕邏輯
        xhr.onload = function (res) {
            //請求完成
            let blob = this.response;
            let reader = new FileReader();
            reader.readAsDataURL(blob)
            reader.onload = function (e) {
                //創(chuàng)建a標簽 模擬點擊事件下載文件流
                const object = document.createElement('a');
                //下載的pdf名稱
                object.download = '阿里巴巴Java開發(fā)手冊終極版v1.3.0.pdf';
                object.href = e.target.result;
                $("body").append(object);    // 修復firefox中無法觸發(fā)click
                object.click();
                $(object).remove();
            }
        }
        // 發(fā)送ajax請求
        xhr.send()
    }

2.后臺方法

  @GetMapping("/result")
    public void result(HttpServletRequest request, HttpServletResponse response) throws IOException {
		//你的文件所存放的地址 我這邊放在e盤下
        String pdfPath = "E:/阿里巴巴Java開發(fā)手冊終極版v1.3.0.pdf";
        response.setCharacterEncoding("utf-8");
        response.setContentType("multipart/form-data");
        response.setHeader("Content-Disposition", "xxx.pdf");
        FileUtils.writeBytes(pdfPath, response.getOutputStream());
        File file = new File(pdfPath);
        if (file.exists()) {
            DataOutputStream temps = new DataOutputStream(response.getOutputStream());
            DataInputStream in = new DataInputStream(new FileInputStream(pdfPath));
            byte[] b = new byte[2048];
            while ((in.read(b)) != -1) {
                temps.write(b);
                temps.flush();
            }
            in.close();
            temps.close();
        } else {
            log.error("文件不存在!");
        }
    }
 /**
     * 輸出指定文件的byte數(shù)組
     * 
     * @param filePath 文件路徑
     * @param os 輸出流
     * @return
     */
    public static void writeBytes(String filePath, OutputStream os) throws IOException
    {
        FileInputStream fis = null;
        try
        {
            File file = new File(filePath);
            if (!file.exists())
            {
                throw new FileNotFoundException(filePath);
            }
            fis = new FileInputStream(file);
            byte[] b = new byte[1024];
            int length;
            while ((length = fis.read(b)) > 0)
            {
                os.write(b, 0, length);
            }
        }
        catch (IOException e)
        {
            throw e;
        }
        finally
        {
            if (os != null)
            {
                try
                {
                    os.close();
                }
                catch (IOException e1)
                {
                    e1.printStackTrace();
                }
            }
            if (fis != null)
            {
                try
                {
                    fis.close();
                }
                catch (IOException e1)
                {
                    e1.printStackTrace();
                }
            }
        }
    }

補充:JAVA下載PDF 到本地 或 返回文件流

@Slf4j
public class PDFUtils {
    /**
     *
     * @param fileUrl 文件路徑
     * @param saveUrl  文件保存路徑
     * @param fileName  文件名稱
     * @throws IOException
     */
    public static void downloadPdf(String fileUrl, String saveUrl, String fileName) throws IOException {
        URL url = new URL(fileUrl);
        HttpURLConnection conn = (HttpURLConnection)url.openConnection();
        //設(shè)置超時間為3秒
        conn.setConnectTimeout(5*1000);
        //防止屏蔽程序抓取而返回403錯誤
        conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
        //得到輸入流
        InputStream inputStream = conn.getInputStream();
        //獲取自己數(shù)組
        byte[] getData = readInputStream(inputStream);
        //文件保存位置
        File saveDir = new File(saveUrl);
        if(!saveDir.exists()){
            saveDir.mkdir();
        }
        File file = new File(saveDir+File.separator+fileName);
        FileOutputStream fos = new FileOutputStream(file);
        fos.write(getData);
        if(fos!=null){
            fos.close();
        }
        if(inputStream!=null){
            inputStream.close();
        }
        System.out.println("info:"+url+" download success");
    }
    /**
     * 從輸入流中獲取字節(jié)數(shù)組
     * @param inputStream
     * @return
     * @throws IOException
     */
    public static  byte[] readInputStream(InputStream inputStream) throws IOException {
        byte[] buffer = new byte[1024];
        int len = 0;
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        while((len = inputStream.read(buffer)) != -1) {
            bos.write(buffer, 0, len);
        }
        bos.close();
        return bos.toByteArray();
    }
    /**
     * 下載pdf返回文件流
     * @param response 請求頭
     * @param pdfName fileName
     * @param path    路徑
     */
    public static void toDownload(HttpServletResponse response, String pdfName,String path)  {
        ServletOutputStream out = null;
        InputStream inputStream = null;
        try {
            // 獲取外部文件流
            log.info("下載中------invPdfUrl=" +path);
            URL url = new URL(path);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setConnectTimeout(3 * 1000);
            //防止屏蔽程序抓取而返回403錯誤
            conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
            inputStream = conn.getInputStream();
            /**
             * 輸出文件到瀏覽器
             */
            int len = 0;
            // 輸出 下載的響應頭,如果下載的文件是中文名,文件名需要經(jīng)過url編碼
            response.setContentType("text/html;charset=utf-8");
            response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(pdfName, "UTF-8"));
            response.setHeader("Cache-Control", "no-cache");
            out = response.getOutputStream();
            byte[] buffer = new byte[1024];
            while ((len = inputStream.read(buffer)) > 0) {
                out.write(buffer, 0, len);
            }
            out.flush();
            log.info("pdf文件下載完成.....");
        } catch (Exception e) {
            log.error("pdf文件下載異常,e = {}", e);
            e.printStackTrace();
        } finally {
            if (inputStream != null) {
                try {
                    inputStream.close();
                } catch (Exception e) {
                }
            }
            if (out != null) {
                try {
                    out.close();
                } catch (Exception e) {
                }
            }
        }
    }
}

總結(jié) 

到此這篇關(guān)于JAVA返回PDF文件流并進行下載的文章就介紹到這了,更多相關(guān)JAVA返回PDF文件流并下載內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spring Boot 整合mybatis 使用多數(shù)據(jù)源的實現(xiàn)方法

    Spring Boot 整合mybatis 使用多數(shù)據(jù)源的實現(xiàn)方法

    這篇文章主要介紹了Spring Boot 整合mybatis 使用多數(shù)據(jù)源的實現(xiàn)方法,需要的朋友可以參考下
    2018-03-03
  • Java 包裝類型及易錯陷阱詳解

    Java 包裝類型及易錯陷阱詳解

    這篇文章主要介紹了Java 包裝類型及易錯陷阱詳解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • springboot調(diào)用C#封裝的DLL文件中函數(shù)的實現(xiàn)那

    springboot調(diào)用C#封裝的DLL文件中函數(shù)的實現(xiàn)那

    本文主要介紹了在Spring Boot中集成C# DLL,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2025-07-07
  • SprintBoot深入淺出講解場景啟動器Starter

    SprintBoot深入淺出講解場景啟動器Starter

    本篇文章將和大家分享一下 Spring Boot 框架中的 Starters 場景啟動器的內(nèi)容,關(guān)于 Starters 具體是用來做什么的,以及在開發(fā) Spring Boot項目前,要如何自定義一個 Starters 場景啟動器
    2022-06-06
  • 基于Java的Scoket編程

    基于Java的Scoket編程

    本文詳細講解了基于Java的Scoket編程,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-12-12
  • 使用Nexus搭建Maven私服的方法步驟

    使用Nexus搭建Maven私服的方法步驟

    這篇文章主要介紹了使用Nexus搭建Maven私服的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-06-06
  • Mybatis日期格式自動轉(zhuǎn)換需要用到的兩個注解說明

    Mybatis日期格式自動轉(zhuǎn)換需要用到的兩個注解說明

    這篇文章主要介紹了Mybatis日期格式自動轉(zhuǎn)換需要用到的兩個注解說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • 在Java項目中實現(xiàn)CI/CD持續(xù)集成與持續(xù)部署

    在Java項目中實現(xiàn)CI/CD持續(xù)集成與持續(xù)部署

    這篇文章主要為大家介紹了在Java項目中實現(xiàn)CI/CD持續(xù)集成與持續(xù)部署詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-06-06
  • Mybatis-Plus通用枚舉的使用詳解

    Mybatis-Plus通用枚舉的使用詳解

    這篇文章主要介紹了Mybatis-Plus通用枚舉的使用詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-08-08
  • java 讀取網(wǎng)頁內(nèi)容的實例詳解

    java 讀取網(wǎng)頁內(nèi)容的實例詳解

    這篇文章主要介紹了java 讀取網(wǎng)頁內(nèi)容的實例詳解的相關(guān)資料,希望通過本文能幫助到大家,讓大家學習理解這部分內(nèi)容,需要的朋友可以參考下
    2017-09-09

最新評論

荆门市| 黄平县| 云龙县| 许昌县| 海城市| 获嘉县| 同江市| 政和县| 伊宁县| 长海县| 清远市| 武城县| 扶余县| 马龙县| 礼泉县| 阿拉善盟| 大英县| 东山县| 临安市| 张家界市| 城固县| 大连市| 新蔡县| 米林县| 龙陵县| 威远县| 兴文县| 泽库县| 东光县| 郓城县| 基隆市| 龙海市| 若尔盖县| 梁平县| 克东县| 治县。| 团风县| 万源市| 全南县| 靖远县| 潞西市|