亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

前端要預(yù)覽服務(wù)器PDF 可直接將要blob流返回給前端 即可用瀏覽器自帶pdf預(yù)覽功能打開(kāi),現(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è)位置開(kāi)始讀,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)文章

  • Spring?Boot?Admin?監(jiān)控指標(biāo)接入Grafana可視化的實(shí)例詳解

    Spring?Boot?Admin?監(jiān)控指標(biāo)接入Grafana可視化的實(shí)例詳解

    Spring Boot Admin2 自帶有部分監(jiān)控圖表,如圖,有線程、內(nèi)存Heap和內(nèi)存Non Heap,這篇文章主要介紹了Spring?Boot?Admin?監(jiān)控指標(biāo)接入Grafana可視化,需要的朋友可以參考下
    2022-11-11
  • java調(diào)用shell命令并獲取執(zhí)行結(jié)果的示例

    java調(diào)用shell命令并獲取執(zhí)行結(jié)果的示例

    今天小編就為大家分享一篇java調(diào)用shell命令并獲取執(zhí)行結(jié)果的示例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-07-07
  • 如何實(shí)現(xiàn)廣告彈窗觸達(dá)頻率的控制?

    如何實(shí)現(xiàn)廣告彈窗觸達(dá)頻率的控制?

    這篇文章主要介紹了如何實(shí)現(xiàn)廣告彈窗觸達(dá)頻率的控制,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • Java使用volatile關(guān)鍵字的注意事項(xiàng)

    Java使用volatile關(guān)鍵字的注意事項(xiàng)

    volatile關(guān)鍵字是Java中的一種稍弱的同步機(jī)制,為什么稱之為弱機(jī)制。這篇文章主要介紹了Java使用volatile關(guān)鍵字的注意事項(xiàng),需要的朋友可以參考下
    2017-02-02
  • 原理分析SonarQube中IdentityProvider賬戶互斥現(xiàn)象

    原理分析SonarQube中IdentityProvider賬戶互斥現(xiàn)象

    這篇文章主要為大家介紹分析SonarQube中IdentityProvider賬戶互斥現(xiàn)象原理,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2022-02-02
  • SpringBoot 集成 Kettle的實(shí)現(xiàn)示例

    SpringBoot 集成 Kettle的實(shí)現(xiàn)示例

    本文主要介紹了SpringBoot 集成 Kettle的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2025-01-01
  • Java完整實(shí)現(xiàn)記事本代碼

    Java完整實(shí)現(xiàn)記事本代碼

    這篇文章主要介紹了Java實(shí)現(xiàn)的簡(jiǎn)易記事本,較為詳細(xì)的分析了基于java實(shí)現(xiàn)記事本程序的完整過(guò)程,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06
  • Java算法之位圖的概念和實(shí)現(xiàn)詳解

    Java算法之位圖的概念和實(shí)現(xiàn)詳解

    這篇文章主要介紹了Java算法之位圖的概念和實(shí)現(xiàn)詳解,位圖可以利用每一位來(lái)對(duì)應(yīng)一個(gè)值,比如可以利用int類型的數(shù)去存儲(chǔ)0~31這個(gè)集合的數(shù)字,如果該集合內(nèi)的數(shù)字存在,則把對(duì)應(yīng)的位設(shè)置位1默認(rèn)為0,需要的朋友可以參考下
    2023-10-10
  • Spring?Session(分布式Session共享)實(shí)現(xiàn)示例

    Spring?Session(分布式Session共享)實(shí)現(xiàn)示例

    這篇文章主要介紹了Spring?Session(分布式Session共享)實(shí)現(xiàn)示例,文章內(nèi)容詳細(xì),需要的朋友可以參考下
    2023-01-01
  • 詳解eclipse下創(chuàng)建第一個(gè)spring boot項(xiàng)目

    詳解eclipse下創(chuàng)建第一個(gè)spring boot項(xiàng)目

    本文詳細(xì)介紹了創(chuàng)建第一個(gè)基于eclipse(eclipse-jee-neon-3-win32-x86_64.zip)+spring boot創(chuàng)建的項(xiàng)目。
    2017-04-04

最新評(píng)論