• 前端预览与下载PDF小结


    项目中经常会遇到pdf的下载和预览的功能,那么我们该如何实现呢?

    前提1:后台返回的是文件地址(非文件流)

    下载:

    <a href="/1.pdf" target="_blank" download>下载</a>
    加上download即可。

    预览:

    <a href="/1.pdf" target="_blank">下载</a>

    预览需要去掉download属性。

    前提2:后台返回文件流地址

    下载:

    方法1:

    <a href="http://test.pdf">下载</a>  
    <a
                :href="
                  SYS_URL +
                    '/sa/panorama/downExcel?templateId=' +
                    record.templateId +
                    '&templateName=' +
                    record.templateName +
                    ''
                "
                ><a-button> 下载模版 </a-button></a
       >
    直接默认就可以下载,其实也就是相当于用a标签来进行get请求,地址就是直接能够获取文件流的地址,地址可以传参,也可以不传参,根据实际接口要求来定。
     
    方法2:
    利用get请求,并且 responseType: "blob", 设置返回的请求是blob类型,来请求获取具体的文件流,然后经过处理后可以下载文件。
    axios({
            url: `/admin/file/getFileByName?fileName=${fileName}`,
            method: "get",
            responseType: "blob",
          }).then((response) => {
            // 处理返回的文件流
            const blob = response.data;
            const link = document.createElement("a");
            link.href = URL.createObjectURL(blob);
            link.download = '文件名称';
            document.body.appendChild(link);
            link.click();
            window.setTimeout(function () {
              URL.revokeObjectURL(blob);
              document.body.removeChild(link);
            }, 0);
     });

    预览:

    需要插件支持。如果pdf.js  或者  vue-pdf 等插件。

    小结:不论后台返回的是文件或者文件流,其实对于下载来说都是好处理的。而对于如果是文件流来说,想在谷歌浏览器预览,则还需要额外的插件,才能预览。

  • 相关阅读:
    Hoppz板子
    [cf] Invoking the Magic
    [acm]关于字符的处理
    [acm]排序总结
    [acm]循环队列(不是自己写queue)
    [acm]关于map的一些知识
    [acm]二进制枚举
    P1005 矩阵取数游戏 区间DP
    ICPC North Central NA Contest 2017 (部分)
    灾后重建 弗洛伊德最短路
  • 原文地址:https://www.cnblogs.com/teamemory/p/15271586.html
Copyright © 2020-2023  润新知