React(四):DOCX文件在线预览

效果

注意

⚠️注意:部分文件预览存在问题

依赖

bash 复制代码
$ yarn add docx-preview
$ yarn add jszip

源码

ts 复制代码
import './index.scss';
import {useRef} from 'react';
import type {UploadRequestOption} from 'rc-upload/lib/interface';
import {Upload, Button, message} from 'antd';
import JSZip from 'jszip';
import * as docx from 'docx-preview';

function PreviewDOCX() {

    const containerRef = useRef<HTMLDivElement>(null);

    const fileUpload = async (options: UploadRequestOption) => {

        if ((options.file as File).name.split('.').pop()!.toLowerCase() !== 'docx') return message.error('仅支持docx文件!');

        const zip = await JSZip.loadAsync(options.file as File);
        const blob = await zip.generateAsync({type: 'blob'});

        docx.renderAsync(blob, containerRef.current!)
            .then(res => {
                console.log(res);
            })
            .catch(err => {
                console.log({err});
            });
    };

    return (
        <>
            <Upload className="upload-btn" action="#" customRequest={fileUpload} showUploadList={false}>
                <Button type="primary">点击上传</Button>
            </Upload>
            <div className="docx-preview-wrap" ref={containerRef}></div>
        </>
    );
}

export default PreviewDOCX;
相关推荐
小雨下雨的雨4 小时前
井字棋AI机器人实现详解 - Minimax算法实战-鸿蒙PC Electron框架完成
前端·人工智能·算法·华为·electron·鸿蒙
ZC跨境爬虫7 小时前
跟着 MDN 学JavaScript day_7:数学运算与逻辑判断实战测试
开发语言·前端·javascript·学习·ecmascript
fangdengfu1238 小时前
ES分析系统各个服务日志占用量
java·前端·elasticsearch
凌云拓界8 小时前
文件管理:让AI安全操作你的电脑 ——CogitoAgent开发实战(三)
javascript·人工智能·架构·开源·node.js
凌云拓界8 小时前
联网能力:让AI看见更广阔的世界 ——CogitoAgent开发实战(四)
javascript·人工智能·架构·node.js·创业创新
JustHappy9 小时前
古法编程秘籍(六):程序到底是怎么跑起来的?从 IO 到中断,一次讲明白
前端·后端·全栈
HYCS10 小时前
用pixi.js实现fabric.js(六):从线性代数的角度理解编辑器交互
前端·javascript·canvas
卷帘依旧10 小时前
useImperativeHandle的作用
前端
卷帘依旧10 小时前
Hooks在Fiber上的存储原理
前端