vue中使用docx-preview插件预览word文档(后端express)

问题描述

本文记录了一下预览word文档的功能。需要用到:

前端:vue
后端:express
插件:docx-preview

思路分析

  1. 后端express代码中读取文件夹中的 .docx 类型文件
  2. 然后将其以可读流的方式返回给前端一个blob流文件
  3. 后端返回的流文件前端收到以后,执行docx-preview插件的renderAsync方法即可渲染出预览的效果

我们先看一下效果图

效果图

代码

后端express代码

// 引入文件模块 
const fs = require("fs")

// 返回word文件接口
route.get('/getDoc', (req, res) => {

  // 假设我们的word文档文件就存放在这个doc目录里面
  let docxUrl = './doc/出师表.docx'

  // 允许跨域
  res.header("Access-Control-Allow-Origin", "*");

  // 设置请求头
  res.writeHead(200, {
    // 指定文件类型为docx
    'Content-Type': 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
  })

  //创建可读流
  let readStream = fs.createReadStream(docxUrl)

  // 将读取的结果以管道pipe流的方式返回给前端
  readStream.pipe(res);

})

前端vue代码

注意,vue项目要先下载插件哦
cnpm i docx-preview --save




为了方便大家调试效果,所以后端接口我也提供了一份,大家如果不想写node接口直接用我的即可,接口在上述vue代码中,直接复制粘贴运行即可

总结

好记性不如烂笔头,如果帮到了您,欢迎动动您的小手点个赞呗 ^_^


2023.08.26更新 预览office文档(word、excel、ppt、pdf、png)简便方法

  • 上述的docx-preview插件只能预览简单的word文档(适合自己搞着玩)
  • 若是复杂的文档,甚至是excel、ppt,那问题还是没有解决,那这个时候有以下方案

方案一 不提供预览功能,想要看内容,用户需要下载再看

这种方式,的确很简便,不过用户体验不太好

方案二 使用微软提供的免费服务 //view.officeapps.live.com/op/view.aspx?src=xxxyyyzzz

  • 若是你的文件比较注重隐私,不能公开的话,这种方式,就不太适合了
  • 否者的话,是比较方便的解决方案
  • 这里需要你有一个自己的服务器
  • 并且服务器要购买域名对应
  • 要默认80端口哦,否则依旧是无法预览(笔者这里的也是80端口nginx转发了一下罢了)

笔者带大家回顾一下使用express搭建一个静态资源服务器

代码

// 引入express插件包并生成一个实例app
var express = require('express')
var app = express()

// 静态资源服务器
var path = require('path') // path路径用来找文件哦
var serveStatic = require('serve-static') // serve-static用来启动静态资源文件服务
const rootPath = path.join(__dirname, 'public') // 去哪里找呢?去public目录下找
app.use(serveStatic(rootPath)) // 注册即使用

// 在80端口上启动后端服务
app.listen(80, (req, res) => {
    console.log('后端服务端口地址为:  http://localhost:80');
    console.log('后端服务端口地址为:  http://127.0.0.1:80');
})
完整代码在github仓库:https://github.com/shuirongshuifu/staticServeExpress

效果图

vue中使用docx-preview插件预览word文档(后端express)_第1张图片

iframe使用