当前位置: 首页 > news >正文

js实现pdf、word、excel、图片、html文件预览及下载

最近要实现一个pdfwordexcel图片等文件的在线预览下载的功能,绞尽脑汁,冥思苦想了好久,根据俺前端工作两年半的经验,预览一般都是用的a标签,文件下载用的window.open,这有什么难度吗,很easy啊,于是我拍着肚子跟领导说,某问题,这个我有经验,很快就能实现!说完以后就去埋头苦干了,没有注意到领导意味深长的微笑。。。

思路如下:

1.给循环出来的每个列的文件名用a标签包裹着并且添加点击事件,点击时把文件的url赋给a标签的href,这样就可以在新窗口在线预览
2.使用flex布局,将文件名和下载按钮左右两边分开,点击下载时,定义一个点击事件,点击时将文件的url传过去,并放到window.open里面;
在这里插入图片描述
代码大致如下:

 <ul class="cs_ul" v-if="searchList.length>0">
  <li v-for="(item, index) in searchList" :key="index"  >
    <span style="display:flex;justify-content:space-between;padding-right:10px;box-size
    :border-box;">
      <a :href="item.url">{{item.name}}</a>
      <span @click="downloads(item)" style="cursor:pointer;">下载</span>
    </span>
  </li>
</ul>

//js部分
downloads(val){
  this.$confirm('确定要下载该文件吗?', '提示', {type: 'warning'}).then(() => {
    window.open(val);
  }).catch(()=>{});
}

但是最后发现好像是我想的太简单了。。
1.pdf文件路径放到window.open里面,点击是进行在线预览
2.word文件和excel文件通过a标签打开时,是直接下载了

然后只好面向百度编程了,最后发现可以使用office web 查看器实现word、excel等文件的在线预览,拿来一用发现真的可以哎!哈哈!
截图如下:
在这里插入图片描述

具体使用方法如下:

一、在线预览

定义一个方法,在点击时,把文件的url传过去,然后根据文件的后缀名进行判断,
若文件格式是word、excel、ppt等,则用office web查看器,记得使用encodeURIComponent编码一下,然后把编码后的文件路径拼接到http://view.officeapps.live.com/op/view.aspx?src=这个后面,最后把拼接后的路径放到window.open里面,这样在点击时会直接调到一个新窗口,进行在线预览!
若文件格式是html、pdf、图片等,则直接把路径放到window.open里面即可,点击时同样会在新窗口进行在线预览

<ul class="cs_ul" v-if="searchList.length>0">
 <li v-for="(item, index) in searchList" :key="index"  >
   <span style="display:flex;justify-content:space-between;padding-right:10px;box-size:border-box;">
     <span @click="getExcel(item)">{{item.name}}</span>
     <span @click="downloads(item)" style="cursor:pointer;">下载</span>
   </span>
  </li>
</ul>

js部分

  getExcel(val){
      let file=val.url;
      // file="https://image.yoshebao.com/temp/20220830/38f857866a6a64e4f0ae39a9574c09f3.jpg";
      // file="https://image.yoshebao.com/temp/20220204/a21ba71f4c5229fd5a065c121589fa0c.xls"";
      // file="https://image.yoshebao.com/temp/20220323/终止协议范本(报工伤用).docx";
      // file="https://www.gjtool.cn/pdfh5/git.pdf";
      // file="https://zhidao.baidu.com/question/528206706552245005.html";
      let lastIndex=file.lastIndexOf(".");
      let suffix=file.substring(lastIndex+1);
      //文件格式是word文档、ppt、excel文件文件时
      if(suffix=='doc'||suffix=='docx'||suffix=='ppt'||suffix=='xls'||suffix=='xlsx'){
        let fileUrl=encodeURIComponent(file)
        //使用Office Web查看器
        let officeUrl = 'http://view.officeapps.live.com/op/view.aspx?src='+fileUrl
        window.open(officeUrl,'_target');
      }else{
        //其他文件格式比如pdf、图片、html
        window.open(file);
      }
    },

二、下载

在线预览的事解决了,接下来就是下载文件了,和领导说商量了下,说是前端在点击时,调用接口,把文件路径传过去,然后后端返回来一个zip压缩包,把这个zip压缩包路径放到window.open里面,电脑会自动下载的,我一听这简单啊

方法如下:

downloads(val){
  this.$confirm('确定要下载该文件吗?', '提示', {type: 'warning'}).then(() => {
     this.$http.post('/Document/download',{id: val.id}).then(res => {
       if (res.data.code === 0) {
         this.$message({type: 'success', message: res.data.msg});
         // let url="https://image.yoshebao.com/document/超级管理人员20220830.zip";
         // window.open(url);
         window.open(res.data.data);
       }else{
         this.$message.error(res.data.msg);
       }
     }).catch(e => {
       this.$message.error(e.message);
     })
   }).catch(()=>{});
 },

在这里插入图片描述
哈哈,遇事不慌,面向百度编程吧!!

相关文章:

  • 孙卫琴的《精通Vue.js》读书笔记-注册全局组件和局部组件
  • 28、iNeRF
  • 相关性 与 独立性
  • set和map的模拟
  • window环境下安装大数据环境
  • 解决navicat premium连接数据库自动断开问题
  • 学历提升中的我,入职产品经理之路
  • 网络安全专家,这5本入门秘籍人手一套
  • 智源AI日报(2022-08-30): 华为谢凌曦:关于视觉识别领域发展的个人观点
  • 示波器十大基础知识你都了解多少
  • 【经典算法学习-排序篇】冒泡排序
  • Nacos系列【26】源码分析篇之客户端自动注册
  • DBeaver常用快捷键(含复制当前行)
  • Java ThreadPoolExecutor的拒绝策略
  • 操作系统——磁盘操作
  • 《Javascript数据结构和算法》笔记-「字典和散列表」
  • 2017-09-12 前端日报
  • CSS 三角实现
  • Js基础知识(一) - 变量
  • js面向对象
  • miniui datagrid 的客户端分页解决方案 - CS结合
  • Netty+SpringBoot+FastDFS+Html5实现聊天App(六)
  • 包装类对象
  • 读懂package.json -- 依赖管理
  • 工作踩坑系列——https访问遇到“已阻止载入混合活动内容”
  • 可能是历史上最全的CC0版权可以免费商用的图片网站
  • 使用Tinker来调试Laravel应用程序的数据以及使用Tinker一些总结
  • 数组的操作
  • 学习Vue.js的五个小例子
  • 以太坊客户端Geth命令参数详解
  • 译自由幺半群
  • Spark2.4.0源码分析之WorldCount 默认shuffling并行度为200(九) ...
  • ​比特币大跌的 2 个原因
  • ​什么是bug?bug的源头在哪里?
  • # 再次尝试 连接失败_无线WiFi无法连接到网络怎么办【解决方法】
  • #我与Java虚拟机的故事#连载15:完整阅读的第一本技术书籍
  • $Django python中使用redis, django中使用(封装了),redis开启事务(管道)
  • (1)SpringCloud 整合Python
  • (10)工业界推荐系统-小红书推荐场景及内部实践【排序模型的特征】
  • (二)【Jmeter】专栏实战项目靶场drupal部署
  • (附源码)python旅游推荐系统 毕业设计 250623
  • (一)【Jmeter】JDK及Jmeter的安装部署及简单配置
  • (自用)learnOpenGL学习总结-高级OpenGL-抗锯齿
  • .NET Core 将实体类转换为 SQL(ORM 映射)
  • .NET/MSBuild 中的发布路径在哪里呢?如何在扩展编译的时候修改发布路径中的文件呢?
  • .Net开发笔记(二十)创建一个需要授权的第三方组件
  • .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验
  • .sys文件乱码_python vscode输出乱码
  • @DependsOn:解析 Spring 中的依赖关系之艺术
  • [ element-ui:table ] 设置table中某些行数据禁止被选中,通过selectable 定义方法解决
  • [20170705]diff比较执行结果的内容.txt
  • [ai笔记9] openAI Sora技术文档引用文献汇总
  • [Angular] 笔记 9:list/detail 页面以及@Output
  • [BZOJ1053][HAOI2007]反素数ant
  • [CSS]文字旁边的竖线以及布局知识