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;
相关推荐
jiangzhihao05158 小时前
前端自动翻译插件webpack-auto-i18n-plugin的使用
前端·webpack·node.js
软件技术NINI10 小时前
html css网页制作成品——HTML+CSS盐津铺子网页设计(5页)附源码
前端·css·html
mapbar_front11 小时前
面试问题—我的问题问完了,你还有什么想问我的吗?
前端·面试
quweiie11 小时前
thinkphp8+layui多图上传,带删除\排序功能
前端·javascript·layui
李鸿耀11 小时前
React 项目 SVG 图标太难管?用这套自动化方案一键搞定!
前端
闲蛋小超人笑嘻嘻11 小时前
树形结构渲染 + 选择(Vue3 + ElementPlus)
前端·javascript·vue.js
叶梅树12 小时前
从零构建A股量化交易工具:基于Qlib的全栈系统指南
前端·后端·算法
巴博尔12 小时前
uniapp的IOS中首次进入,无网络问题
前端·javascript·ios·uni-app
焚 城12 小时前
UniApp 实现双语功能
javascript·vue.js·uni-app
Asthenia041213 小时前
技术复盘:从一次UAT环境CORS故障看配置冗余的危害与最佳实践
前端