结合 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中实现点击页面切换功能,可以通过路由跳转或组件动态渲染两种方式完成。以下是具体实现方法: 使用Vue Router实现页面跳转 安装Vue Router后,在项目中配置…

vue实现钟表

vue实现钟表

使用 Vue 实现动态钟表 以下是一个基于 Vue 3 的动态钟表实现方案,包含时分秒指针和数字时间显示。 模板部分 <template> <div class="clock-…

vue底层实现

vue底层实现

Vue.js 的底层实现原理 Vue.js 是一个渐进式 JavaScript 框架,其核心实现主要包括响应式系统、虚拟 DOM、模板编译和组件化机制。以下是其关键实现细节: 响应式系统 Vue 2…

vue实现多选

vue实现多选

Vue 实现多选功能 在 Vue 中实现多选功能可以通过多种方式完成,以下是常见的几种方法: 使用 v-model 绑定数组 通过 v-model 绑定到一个数组,可以实现多选功能。适用于复选框组(…

vue实现横滚

vue实现横滚

Vue 实现横滚效果 横滚效果通常指水平滚动内容,常见于轮播图、横向导航栏等场景。以下是几种实现方式: 使用 CSS 和 Vue 结合 通过 CSS 的 overflow-x 和 white-spa…

vue实现转页面

vue实现转页面

Vue 实现页面跳转的方法 在 Vue 中实现页面跳转通常可以通过以下几种方式完成,具体取决于项目结构和需求。 使用 router-link 组件 router-link 是 Vue Router…