vue 预览 有token验证的 doc、docx、pdf、xlsx、csv、图片 并下载

预览 doc我也不会

javascript 复制代码
//docx
<div v-if="previewType == 'docx'"  ref="iframeDom" style="border: none; width: 100%; height: 100%"></div>
import { renderAsync } from "docx-preview";
let iframeDom: any = ref();
axios({
      url: docURL,
      method: "get",
      timeout: 100000,
      responseType: "blob",
      headers: {
        token: "xxxxx",
      },
    })
      .then(({ data }) => {
        previewType.value = "docx";
        console.log("iframeDom", iframeDom.value);
        renderAsync(data, iframeDom.value);
      })
      .catch((error) => {
        console.log(error);
      });
  }

//pdf || 图片
 <iframe :src="src" style="border: none; width: 100%; height: 100%" v-if="previewType == 'pdf'">
          <p>您的浏览器不支持 iframe 标签,请从列表中下载预览</p>
 </iframe>
  previewType.value = "pdf";
    src.value =  docURL
previewType.value = "img";
    src.value =  docURL
        
//xlsx 、csv
import LuckyExcel from 'luckyexcel'
 <div v-if="previewType == 'xlsx'" id="mysheet" style="margin:0px;padding:0px;width:100%;height:85vh;"></div>
previewType.value = "xlsx";
    LuckyExcel.transformExcelToLuckyByUrl(docURL,
      "", (exportJson: any, luckysheetfile: any) => {
        if (exportJson.sheets == null || exportJson.sheets.length == 0) {
          alert("文件读取失败!");
          return;
        }
        // 销毁原来的表格
        window.luckysheet.destroy();
        // 重新创建新表格
        window.luckysheet.create({
          container: 'mysheet', // 设定DOM容器的id
          showtoolbar: false, // 是否显示工具栏
          showinfobar: false, // 是否显示顶部信息栏
          showstatisticBar: false, // 是否显示底部计数栏
          sheetBottomConfig: false, // sheet页下方的添加行按钮和回到顶部按钮配置
          allowEdit: false, // 是否允许前台编辑
          enableAddRow: false, // 是否允许增加行
          enableAddCol: false, // 是否允许增加列
          sheetFormulaBar: false, // 是否显示公式栏
          enableAddBackTop: false, //返回头部按钮
          data: exportJson.sheets, //表格内容
          title: exportJson.info.name //表格标题
        });
      });

下载

javascript 复制代码
pdf
axios({
      url: downURL,
      method: "get",
      timeout: 100000,
      responseType: "blob",
      headers: {
        token: "xxxx",
      },
    }).then(({ data }) => {

      const aLink = document.createElement("a");
      const objectUrl = window.URL.createObjectURL(new Blob([data], { type: "application/pdf" }));
      document.body.appendChild(aLink);
      aLink.style.display = "none";
      aLink.href = objectUrl;
      aLink.download = infoData.value.fileName;
      aLink.click();
      document.body.removeChild(aLink);
      return
    });

图片
var image = new Image();
    image.setAttribute("crossOrigin", "anonymous");
    image.onload = function () {
      var canvas = document.createElement("canvas");
      canvas.width = image.width;
      canvas.height = image.height;
      var context: any = canvas.getContext("2d");
      context.drawImage(image, 0, 0, image.width, image.height);
      var url = canvas.toDataURL("image/png");

      var a = document.createElement("a");
      var event = new MouseEvent("click");
      a.download = down.value.split('.')[0] || "photo";
      a.href = url;
      a.dispatchEvent(event);
    };
    image.src = downURL;  // 指定图片的来源,这是需要我们提供的
    return

其他文档
window.open(downURL, '_blank')
相关推荐
毕设源码-郭学长9 分钟前
【开题答辩全过程】以 基于Web的高校课程目标达成度系统设计与实现为例,包含答辩的问题和答案
前端
wuhen_n26 分钟前
高阶函数与泛型函数的类型体操
前端·javascript·typescript
ヤ鬧鬧o.2 小时前
多彩背景切换演示
前端·css·html·html5
lethelyh2 小时前
Vue day1
前端·javascript·vue.js
酉鬼女又兒2 小时前
SQL113+114 更新记录(一)(二)+更新数据知识总结
java·服务器·前端
无风听海2 小时前
AngularJS中 then catch finally 的语义、执行规则与推荐写法
前端·javascript·angular.js
利刃大大2 小时前
【Vue】组件化 && 组件的注册 && App.vue
前端·javascript·vue.js
一起养小猫2 小时前
Flutter for OpenHarmony 实战:按钮类 Widget 完全指南
前端·javascript·flutter
css趣多多2 小时前
Vux store实例的模块化管理
前端
我是伪码农3 小时前
Vue 1.26
前端·javascript·vue.js