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

Java后端返回PDF預(yù)覽給前端的實(shí)現(xiàn)

 更新時(shí)間:2023年09月27日 16:33:14   作者:YuiDesu  
前端要預(yù)覽服務(wù)器PDF 可直接將要blob流返回給前端,即可用瀏覽器自帶pdf預(yù)覽功能打開,本文就來(lái)介紹一下如何實(shí)現(xiàn),感興趣的可以了解一下

前端要預(yù)覽服務(wù)器PDF 可直接將要blob流返回給前端 即可用瀏覽器自帶pdf預(yù)覽功能打開,現(xiàn)有兩種方式

方式1 返回blob流給前端 代碼如下       

    @PostMapping(value = "/preview")
    @ResponseBody
    public void showPdf(HttpServletResponse response) {
        try {
            File file = new File("filePath");
            OutputStream out = null;
            try (BufferedInputStream br = new BufferedInputStream(new FileInputStream(file));
            ) {
                byte[] bs = new byte[1024];
                int len;
                response.reset(); // 非常重要
                URL u = new URL("file:///" + "filePath");
                String contentType = u.openConnection().getContentType();
                response.setContentType(contentType);
                response.setHeader("Content-Disposition", "inline;filename="
                        + "preview.pdf");
                out = response.getOutputStream();
                while ((len = br.read(bs)) > 0) {
                    out.write(bs, 0, len);
                }
                out.flush();
                out.close();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

此時(shí) 前端解析可直接拿返回的文件流 例子如下

let blob = this.response;
          const binaryData = [];
          binaryData.push(blob);
          const url = window.URL.createObjectURL(new Blob(binaryData, { type: 'application/pdf' }));
          window.open(url);

但有的時(shí)候 不想返回文件流 可把文件返回為base64 (注意 base64可能超長(zhǎng))此時(shí)代碼修改如下

        File file = new File("filePath");
            OutputStream out = null;
            try (BufferedInputStream br = new BufferedInputStream(new FileInputStream(file));
                         ByteArrayOutputStream outStream = new ByteArrayOutputStream();
            ) {
                int len;
                URL u = new URL("file:///" + "filePath");
                String contentType = u.openConnection().getContentType();
                byte[] buffer = new byte[1024];
                //每次讀取的字符串長(zhǎng)度,如果為-1,代表全部讀取完畢
                //使用輸入流從buffer里把數(shù)據(jù)讀取出來(lái)
                while ((len = br.read(buffer)) != -1) {
                    //用輸出流往buffer里寫入數(shù)據(jù),中間參數(shù)代表從哪個(gè)位置開始讀,len代表讀取的長(zhǎng)度
                    outStream.write(buffer, 0, len);
                }
                // 對(duì)字節(jié)數(shù)組Base64編碼
                Base64Encoder base64 = new Base64Encoder();
                String base64Str = replaceEnter(base64.encode(outStream.toByteArray()));
            }
        } catch (Exception e) {
        }

前端修改如下

 let base64 = resBase64.data.base64;
      base64 = base64.replace(/[\n\r]/g, '')
      const raw = window.atob(base64)
      const rawLength = raw.length
      const uInt8Array = new Uint8Array(rawLength)
      for (let i = 0; i < rawLength; ++i) {
        uInt8Array[i] = raw.charCodeAt(i)
      }
      const url = window.URL.createObjectURL(new Blob([uInt8Array], { type: resBase64.data.contentType }));
      window.open(url);

到此這篇關(guān)于Java后端返回PDF預(yù)覽給前端的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Java 返回PDF預(yù)覽給前端內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java構(gòu)建樹形結(jié)構(gòu)的實(shí)現(xiàn)過(guò)程

    java構(gòu)建樹形結(jié)構(gòu)的實(shí)現(xiàn)過(guò)程

    文章介紹了五種構(gòu)建樹形結(jié)構(gòu)的方式,包括定義實(shí)體類、利用Map集合、使用Stream流、基于Hutool以及MyBatis-Plus的@TableName屬性,最后,還提供了一個(gè)基于Java實(shí)現(xiàn)樹結(jié)構(gòu)模糊搜索功能的示例
    2025-11-11
  • 使用SpringBoot中web項(xiàng)目推薦目錄結(jié)構(gòu)的問(wèn)題

    使用SpringBoot中web項(xiàng)目推薦目錄結(jié)構(gòu)的問(wèn)題

    這篇文章主要介紹了SpringBoot中web項(xiàng)目推薦目錄結(jié)構(gòu)的問(wèn)題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-01-01
  • Java中的適配器原理解析

    Java中的適配器原理解析

    這篇文章主要介紹了Java中的適配器原理解析,當(dāng)實(shí)現(xiàn)接口時(shí),為了使所用的類中只實(shí)現(xiàn)需要的方法,使代碼更加簡(jiǎn)潔,可以定義一個(gè)抽象類實(shí)現(xiàn)接口,將所需要的方法定義為 抽象方法,然后讓類繼承此抽象方法即可,需要的朋友可以參考下
    2023-11-11
  • Spring?Boot整合Bootstrap的超詳細(xì)步驟

    Spring?Boot整合Bootstrap的超詳細(xì)步驟

    之前做前端開發(fā),在使用bootstrap的時(shí)候都是去官網(wǎng)下載,然后放到項(xiàng)目中,在頁(yè)面引用,下面這篇文章主要給大家介紹了關(guān)于Spring?Boot整合Bootstrap的超詳細(xì)步驟,需要的朋友可以參考下
    2023-05-05
  • Java的JDBC編程使用之連接Mysql數(shù)據(jù)庫(kù)

    Java的JDBC編程使用之連接Mysql數(shù)據(jù)庫(kù)

    這篇文章主要給大家介紹了關(guān)于Java的JDBC編程使用之連接Mysql數(shù)據(jù)庫(kù)的相關(guān)資料,JDBC是一種用于執(zhí)行SQL語(yǔ)句的Java?API,可以為多種關(guān)系數(shù)據(jù)庫(kù)提供統(tǒng)一訪問(wèn),需要的朋友可以參考下
    2023-12-12
  • Spring?代碼技巧梳理總結(jié)讓你愛(ài)不釋手

    Spring?代碼技巧梳理總結(jié)讓你愛(ài)不釋手

    這篇文章主要分享了Spring?代碼技巧梳理總結(jié),文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-06-06
  • 詳解Java時(shí)區(qū)處理之Date,Calendar,TimeZone,SimpleDateFormat

    詳解Java時(shí)區(qū)處理之Date,Calendar,TimeZone,SimpleDateFormat

    這篇文章主要介紹了Java時(shí)區(qū)處理之Date,Calendar,TimeZone,SimpleDateFormat的區(qū)別于用法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • 詳解SpringMVC Controller介紹及常用注解

    詳解SpringMVC Controller介紹及常用注解

    本篇文章主要介紹了SpringMVC Controller介紹及常用注解,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-06-06
  • java使用rmi傳輸大文件示例分享

    java使用rmi傳輸大文件示例分享

    由于在rmi中無(wú)法傳輸文件流,可以先用FileInputStream將文件讀到一個(gè)Byte數(shù)組中,然后把這個(gè)Byte數(shù)組作為參數(shù)傳進(jìn)RMI的方法中,然后在服務(wù)器端將Byte數(shù)組還原為outputStream,這樣就能通過(guò)RMI 來(lái)傳輸文件了,下面我們來(lái)看實(shí)例
    2014-01-01
  • Mybatis-Plus?CRUD操作方法

    Mybatis-Plus?CRUD操作方法

    通用?Service?CRUD?封裝?IService?接口,進(jìn)一步封裝?CRUD?采用?get?查詢、remove?刪除?、list?查詢集合、page?分頁(yè)的前綴命名方式區(qū)分?Mapper?層避免混淆,這篇文章主要介紹了Mybatis-Plus?CRUD的相關(guān)知識(shí),需要的朋友可以參考下
    2023-10-10

最新評(píng)論

莱西市| 汝南县| 盘山县| 迁安市| 林口县| 保德县| 高唐县| 年辖:市辖区| 嵩明县| 鸡西市| 昭平县| 巍山| 武乡县| 龙江县| 开鲁县| 博客| 射洪县| 桂东县| 龙游县| 文水县| 石景山区| 栾城县| 罗平县| 安徽省| 深泽县| 恩施市| 中西区| 合川市| 淮安市| 蒲城县| 都匀市| 南雄市| 乌鲁木齐县| 福安市| 梁平县| 新源县| 壶关县| 海城市| 班戈县| 高碑店市| 浮梁县|