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;
相关推荐
star learning white1 天前
xm C语言12
服务器·c语言·前端
tabzzz1 天前
大道至简:万字漫谈前端性能监控
前端·javascript·性能优化
0思必得01 天前
[Web自动化] CSS基础概念和介绍
前端·css·python·自动化·html·web自动化
小胖霞1 天前
全栈系列(15)github Actions自动化部署前端vue
前端·node.js·github
未来魔导1 天前
基于 Gin 框架的 大型 Web 项目推荐架构目录结
前端·架构·gin
foundbug9991 天前
Modbus协议C语言实现(易于移植版本)
java·c语言·前端
Luna-player1 天前
在前端中list.map的用法
前端·数据结构·list
用户47949283569151 天前
面试官问 React Fiber,这一篇文章就够了
前端·javascript·react.js
小徐_23331 天前
Gemini 3做粒子交互特效很出圈?拿 TRAE SOLO 来实现一波!
前端·ai编程·trae
LYFlied1 天前
【一句话概述】Webpack、Vite、Rollup 核心区别
前端·webpack·node.js·rollup·vite·打包·一句话概述