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;
相关推荐
余人于RenYu3 分钟前
前端插件使用汇总
前端·javascript
语落心生8 分钟前
陈年旧事: 基于JS的三维光学引擎
javascript
2301_7891695417 分钟前
前端对接下载文件接口、对接dart app
前端
Liudef0623 分钟前
deepseek v3-0324实现SVG 编辑器
开发语言·javascript·编辑器·deepseek
邴越26 分钟前
OpenAI Function Calling 函数调用能力与外部交互
开发语言·前端·javascript
uhakadotcom32 分钟前
React 和 Next.js 的基础知识对比
前端·面试·github
Billy Qin40 分钟前
Tree - Shaking
前端·javascript·vue.js
Theodore_102240 分钟前
ES6(8) Fetch API 详解
开发语言·前端·javascript·ecmascript·es6
月明长歌1 小时前
Vue + Axios + Mock.js 全链路实操:从封装到数据模拟的深度解析
前端·javascript·vue.js·elementui·es6
CodeCraft Studio1 小时前
Excel处理控件Spire.XLS系列教程:C# 合并、或取消合并 Excel 单元格
前端·c#·excel