vue3+elementplus实现预览upload上传的文件(目前只做了.pdf,.md,.docx)

我是将预览内容显示在对话框中的,word文件预览需要安装一个库

这是命令:pnpm install vueofficedocx

xml 复制代码
      <el-dialog v-model="dialogTwoVisible" title="文件预览" width="800" align-center fullscreen>
        <!-- docx -->
        <vue-office-docx v-if="fileType == 'docx'" :src="src" />
        <!-- pdf/text -->
        <iframe
          v-if="['pdf', 'text'].includes(fileType)"
          :src="src"
          width="100%"
          id="bdIframe"
        ></iframe>
        <!-- md -->
        <div v-if="fileType == 'md'" :src="src" id="markdown-preview" v-html="html"></div>
      </el-dialog>

下面是文件上传成功的回调函数 :on-success="submitFormSuccess"

scss 复制代码
        const html = ref()
        const src = ref('')
      /** 文件上传成功处理 */
        const submitFormSuccess = (response: any, uploadFile) => {
          // response是上传成功后的返回值,uploadFile就是你上传的文件
          fileType.value = uploadFile.name.split('.')[1]
          //word和pdf用的这个
          if (fileType.value !== 'md') {
            src.value = URL.createObjectURL(uploadFile.raw)
          } else {
            //将文件内容读入内存
            const reader = new FileReader()
            //读取完成后触发
            reader.onload = () => {
              const markdownText = reader.result
              const md = new MarkdownIt()
              html.value = md.render(markdownText)
            }
            //异步按字符读取文件内容,结果用字符串形式表示
            reader.readAsText(uploadFile.raw)
          }
        }

pdf有点问题,要改样式,网上搜说是因为触发事件的时候 dialogI弹框里面拿不到 id为bdIframe的组件

ini 复制代码
      const onPreview = () => {
      dialogTwoVisible.value = true
      if (fileType.value === 'pdf') {
        setTimeout(function () {
          /**
           * iframe-宽高自适应显示
           */
          const oIframe = document.getElementById('bdIframe')
          const deviceHeight = document.documentElement.clientHeight
          // oIframe.style.width = Number(deviceWidth) - 220 + "px"; //数字是页面布局宽度差值
          oIframe!.style.height = Number(deviceHeight) - 110 + 'px' //数字是页面布局高度差
        }, 500)
      }
    }

下面就是效果图了

一个很新的手

相关推荐
twins352044 分钟前
解决Vue应用中遇到路由刷新后出现 404 错误
前端·javascript·vue.js
qiyi.sky1 小时前
JavaWeb——Vue组件库Element(3/6):常见组件:Dialog对话框、Form表单(介绍、使用、实际效果)
前端·javascript·vue.js
煸橙干儿~~1 小时前
分析JS Crash(进程崩溃)
java·前端·javascript
安冬的码畜日常1 小时前
【D3.js in Action 3 精译_027】3.4 让 D3 数据适应屏幕(下)—— D3 分段比例尺的用法
前端·javascript·信息可视化·数据可视化·d3.js·d3比例尺·分段比例尺
l1x1n02 小时前
No.3 笔记 | Web安全基础:Web1.0 - 3.0 发展史
前端·http·html
昨天;明天。今天。2 小时前
案例-任务清单
前端·javascript·css
zqx_73 小时前
随记 前端框架React的初步认识
前端·react.js·前端框架
惜.己3 小时前
javaScript基础(8个案例+代码+效果图)
开发语言·前端·javascript·vscode·css3·html5
什么鬼昵称4 小时前
Pikachu-csrf-CSRF(get)
前端·csrf
长天一色4 小时前
【ECMAScript 从入门到进阶教程】第三部分:高级主题(高级函数与范式,元编程,正则表达式,性能优化)
服务器·开发语言·前端·javascript·性能优化·ecmascript