结合 URL.createObjectURL() 实现本地图片预览:
当前位置:首页 > VUE

vue实现预览功能

2026-02-17 13:54:48VUE

Vue 实现文件预览功能

图片预览
使用 <input type="file"> 结合 URL.createObjectURL() 实现本地图片预览:

vue实现预览功能

<template>
  <div>
    <input type="file" @change="handleImagePreview" accept="image/*">
    <img v-if="previewUrl" :src="previewUrl" width="200">
  </div>
</template>

<script>
export default {
  data() {
    return {
      previewUrl: ''
    }
  },
  methods: {
    handleImagePreview(e) {
      const file = e.target.files[0]
      if (file) {
        this.previewUrl = URL.createObjectURL(file)
      }
    }
  }
}
</script>

PDF预览
通过 pdf.js 库实现PDF文件预览:

vue实现预览功能

// 安装依赖
npm install pdfjs-dist

// 组件实现
<template>
  <div>
    <input type="file" @change="handlePdfPreview" accept="application/pdf">
    <canvas ref="pdfCanvas"></canvas>
  </div>
</template>

<script>
import * as pdfjsLib from 'pdfjs-dist'
export default {
  methods: {
    async handlePdfPreview(e) {
      const file = e.target.files[0]
      if (!file) return

      const arrayBuffer = await file.arrayBuffer()
      const pdf = await pdfjsLib.getDocument(arrayBuffer).promise
      const page = await pdf.getPage(1)
      const viewport = page.getViewport({ scale: 1.0 })

      const canvas = this.$refs.pdfCanvas
      const context = canvas.getContext('2d')
      canvas.height = viewport.height
      canvas.width = viewport.width

      await page.render({
        canvasContext: context,
        viewport: viewport
      }).promise
    }
  }
}
</script>

Office文档预览
使用微软Office Online嵌入服务:

<template>
  <iframe 
    :src="`https://view.officeapps.live.com/op/embed.aspx?src=${encodeURIComponent(fileUrl)}`"
    width="100%" 
    height="500px"
    frameborder="0"
  ></iframe>
</template>

<script>
export default {
  props: ['fileUrl']
}
</script>

视频/音频预览
HTML5原生媒体元素实现:

<template>
  <div>
    <input type="file" @change="handleMediaPreview" accept="video/*,audio/*">
    <video v-if="isVideo" :src="previewUrl" controls width="400"></video>
    <audio v-else-if="isAudio" :src="previewUrl" controls></audio>
  </div>
</template>

<script>
export default {
  data() {
    return {
      previewUrl: '',
      isVideo: false,
      isAudio: false
    }
  },
  methods: {
    handleMediaPreview(e) {
      const file = e.target.files[0]
      if (!file) return

      this.previewUrl = URL.createObjectURL(file)
      this.isVideo = file.type.includes('video')
      this.isAudio = file.type.includes('audio')
    }
  }
}
</script>

注意事项

  • 使用 URL.revokeObjectURL() 在组件销毁时释放内存
  • 大文件需考虑分片读取或服务端预处理
  • 敏感文件建议先上传至服务端再返回安全访问链接
  • 跨域问题需配置CORS或使用代理

扩展方案

  • 使用第三方库如 vue-file-preview 实现多格式支持
  • 服务端渲染方案适合保密性高的文档
  • WebAssembly技术处理特殊格式文件

标签: 功能vue
分享给朋友:

相关文章

vue表格实现教学

vue表格实现教学

Vue 表格实现方法 使用原生HTML表格 在Vue模板中直接使用HTML的<table>标签,结合v-for动态渲染数据: <template> <table&g…

实现简易vue

实现简易vue

实现简易 Vue 的核心思路 Vue 的核心功能包括数据响应式、模板编译和虚拟 DOM。以下是一个简易实现方案,涵盖核心功能模块。 数据响应式系统 通过 Object.definePropert…

vue实现popup

vue实现popup

Vue 实现 Popup 弹窗 使用 Vue 原生组件 创建一个基本的 Vue 组件作为弹窗,通过 v-if 或 v-show 控制显示隐藏。 <template> <div&…

vue实现radio

vue实现radio

Vue 实现 Radio 按钮 在 Vue 中实现 Radio 按钮可以通过 v-model 进行数据绑定,结合 input 元素的 type="radio" 属性。以下是一个基本示例: <…

vue mvvm实现

vue mvvm实现

Vue MVVM 实现原理 Vue.js 是一个基于 MVVM(Model-View-ViewModel)模式的框架,其核心是通过数据绑定和响应式系统实现视图与数据的自动同步。以下是 Vue 实现 M…

vue实现选人

vue实现选人

实现选人功能的基本思路 在Vue中实现选人功能通常涉及以下核心环节:数据绑定、用户交互处理、状态管理以及界面渲染。以下是具体实现方法: 数据准备与组件结构 创建包含人员信息的数组,通常从API获取或…