在线预览 Word 文档

引言

随着互联网技术的发展,Web 应用越来越复杂,用户对在线办公的需求也日益增加。在许多业务场景中,能够直接在浏览器中预览 Word 文档是一个非常实用的功能。这不仅可以提高用户体验,还能减少用户操作步骤,提升效率。

实现原理

1. 后端服务

假设后端服务已经提供了两个 API 接口:

getFilesList: 获取文件列表。
previewFile: 获取指定文件的内容。

const express = require('express');
const multer = require('multer');
const fs = require('fs');
const path = require('path');

const app = express();

// 定义文件夹路径
const mergedDir = path.join(__dirname, 'merged');

// 获取文件列表
app.get('/getFilesList', (req, res) => {
   
    fs.readdir(mergedDir, (err, files) => {
   
        if (err) {
   
            return res.status(500).json({
    error: '无法读取文件夹' });
        }

        // 获取每个文件的详细信息
        const fileInfos = files.map(file => {
   
            const filePath = path.join(mergedDir, file);
            const stats = fs.statSync(filePath);

            return {
   
                fileName: file,
                size: stats.size,
                upTime: stats.mtime,
                isFile: stats.isFile()
            };
        });
        let resContent = {
   
            code: 200,
            data: fileInfos || [],
            message: '查询成功'
        }

        res.json(resContent);
    });
});

// 文件预览接口
app.get('/download', (req, res) => {
   
    const {
    fileName } = req.query;
    const filePath = path.join(mergedDir, fileName);

    fs.access(filePath, fs.constants.F_OK, (err) => {
   
        if (err) {
   
            return res.status(404).json({
    error: '文件不存在' });
        }

        const stats = fs.statSync(filePath);

        if (stats.isFile()) {
   
            const contentType = getContentType(fileName);
            res.setHeader('Content-Type', contentType);
            // 对 fileName 进行编码
            const encodedFileName = encodeURIComponent(fileName);
            res.setHeader('Content-Disposition', `inline; filename=${
     encodedFileName}`);
            fs.createReadStream(filePath
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值