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;
相关推荐
发现一只大呆瓜7 分钟前
深度拆解 fetch-event-source库实现原理
前端·javascript·面试
2601_9534656110 分钟前
HLS.js 原生开发!m3u8live.cn打造最贴合项目的 M3U8 在线播放器
开发语言·前端·javascript·python·json·ecmascript·前端开发工具
前端Hardy14 分钟前
为什么资深前端都在悄悄学 WebAssembly?
前端·javascript·面试
发现一只大呆瓜15 分钟前
SSE 流式传输:中断超时处理
前端·javascript·面试
李剑一44 分钟前
别再瞎写电子围栏了!这2种动态效果,科技感直接拉满,源码直接抄走!
前端·vue.js·cesium
木易士心1 小时前
从 MVP 到千万级并发:AI 在前后端开发中的差异化落地指南
前端·后端
葡萄城技术团队1 小时前
字体与打印:前端开发最常见的三个“为什么”
前端
王夏奇1 小时前
python中的深浅拷贝和上下文管理器
java·服务器·前端
siger1 小时前
徒手开荒-我用纯Nodejs+pnpm+monorepo改造了一个多vue2的iframe"微前端"项目
前端·node.js·前端工程化
lichenyang4531 小时前
海克斯大乱斗攻略网站 —— 从零开发到云服务器部署全记录
前端