zoukankan      html  css  js  c++  java
  • 前端预览与下载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 等插件。

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

  • 相关阅读:
    QListView和QListWidget的区别
    Qt下QTableWidget的使用
    用c++封装linux系统调用
    读写锁的简单示例
    SQL 使用序列
    SQL 事务
    SQL ALTER TABLE 命令
    SQL 语句快速参考
    java中三种常见内存溢出错误的处理方法(good)
    Java 内存溢出(java.lang.OutOfMemoryError)的常见情况和处理方式总结
  • 原文地址:https://www.cnblogs.com/teamemory/p/15271586.html
Copyright © 2011-2022 走看看