前端文件预览整合(一)

在 Web 应用中,文件预览功能是一个常见且实用的需求。

最下方有源码,大佬可以跳过简单介绍可以直接拉到下方查看。

方案 1 - kkFileView 服务

kkFile 文件预览是一款开源的文档在线预览项目。项目使用流行的 spring boot 搭建,易上手和部署,基本支持主流办公文档的在线预览,如 doc,docx,Excel,pdf,txt,zip,rar,图片等等。。

  1. 无需前端代码支持:kkFileView 是一个后端服务解决方案,不需要前端大量代码文件支持。
  2. 支持多种文件类型:kkFileView 支持 图片.docx.xlsx.pdf 等常见文件类型。

方案 2 - 前端预览插件(文后附 vue 代码

前端预览插件是一个更轻量级的解决方案,它不需要服务端支持,只需在浏览器中加载文件预览组件即可。目前仅支持docx、xlsx、xls、pdf、jpg、jpeg、png、txt、MP4、MP3格式,其他后缀可继续扩展

  1. 无需后端支持:前端预览插件不需要服务端支持,只需在浏览器中加载文件预览组件即可。
  2. 轻量:前端预览插件仅依赖前端框架,不依赖于任何后端服务。
  3. 灵活:前端预览插件支持各种文件类型,包括图片、文档、音视频等。

方案 2 的实现方式

1. 组件结构

首先,我们定义一个 Vue 组件,用于容纳文件列表和预览对话框。

<template>
  <div class="filepreview-container">
    <div class="file-list">
      <div
        v-for="(item, index) in fileList"
        :key="index"
        class="file-item"
        @click="handleShowFile(item)"
      >
        {{ item.src }}
      </div>
    </div>
    <div v-if="showFile" class="file-preview-dialog" @click="handleClose">
      <!-- 这里空白点击事件是为了阻止触发父元素点击事件,避免关闭预览框  -->
      <div class="file-preview-content" @click.stop="()=>{}">
        <div class="file-box">
          <div
            v-if="!supportedTypes.includes(extractFileType(targetFileSrc))"
            class="empty-box"
          >
            在线预览服务当前仅支持docx/xlsx/xls/pdf/jpg/jpeg/png/txt/mp4/mp3
          </div>
          <div
            v-else-if="extractFileType(targetFileSrc) === 'xls'"
            class="file-content xls-content"
          >
            <div id="tabs-container">
              <div class="tabs-header">
                <!-- 动态生成sheet标签页 -->
                <div
                  :class="['tab-item', { active: activeSheetName === itemSheetName }]"
                  v-for="(item, itemSheetName) in xlsData"
                  :key="itemSheetName"
                  @click="activeSheetName = itemSheetName"
                >
                  {{ itemSheetName }}
                </div>
              </div>
              <div class="tabs-content">
                <!-- 显示当前选中的表格 -->
                <template v-if="activeSheetName && xlsData[activeSheetName]">
                  <table
                    v-if="xlsData[activeSheetName].length > 0"
                    class="data-table"
                  >
                    <thead>
                      <tr>
                        <!-- 表头 -->
                        <th
                          v-for="(item, key) in xlsData[activeSheetName][0]"
                          :key="key"
                        >
                          {{ key }}
                        </th>
                      </tr>
                    </thead>
                    <tbody>
                      <!-- 表格内容 -->
                      <tr v-for="row in xlsData[activeSheetName]" :key="row.id">
                        <td v-for="(cell, key) in row" :key="key">
                          {{ cell }}
                        </td>
                      </tr>
                    </tbody>
                  </table>
                  <div v-else>当前Sheet页无数据</div>
                </template>
                <div v-else>请选择一个Sheet页</div>
              </div>
            </div>
          </div>
          <VueOfficeDocx
            v-else-if="extractFileType(targetFileSrc) === 'docx'"
            :src="targetFileSrc"
            class="file-content docx-content"
          />
          <VueOfficeExcel
            v-else-if="extractFileType(targetFileSrc) === 'xlsx'"
            :src="targetFileSrc"
            class="file-content xlsx-content"
          />
          <VueOfficePdf
            v-else-if="extractFileType(targetFileSrc) === 'pdf'"
            :src="targetFileSrc"
            class="file-content pdf-content"
          />
          <div
            v-else-if="['jpeg', 'png', 'jpg'].includes(extractFileType(targetFileSrc))"
            class="file-content img-content"
          >
            <img :src="targetFileSrc" :alt="targetFileSrc" />
          </div>
          <div
            v-else-if="extractFileType(targetFileSrc) === 'txt'"
            class="file-content txt-content"
          >
            <pre><code>{{ txtData }}</code></pre>
          </div>
          <div
            v-else-if="extractFileType(targetFileSrc) === 'mp3'"
            class="file-content audio-content"
          >
            <!-- 音频文件 -->
            <audio :src="targetFileSrc" controls width="100%" height="30px">
              您的浏览器不支持 audio 标签。
            </audio>
          </div>
          <div
            v-else-if="extractFileType(targetFileSrc) === 'mp4'"
            class="file-content video-content"
          >
            <!-- 视频文件 -->
            <video controls width="auto" height="100%">
              <source :src="targetFileSrc" type="video/mp4" />
              您的浏览器不支持 Video 标签。
            </video>
          </div>
        </div>
        <div class="file-box-btns">
          <div @click="downLoadFile">下载</div>
          <div @click="handleClose">取消</div>
        </div>
      </div>
    </div>
  </div>
</template>
2. 使用第三方库

为了处理不同类型的文件预览,我们将使用@vue-officexlsx-js-style

安装依赖
npm install @vue-office/docx @vue-office/excel @vue-office/pdf xlsx-js-style
引入并注册组件

在 Vue 组件中,我们需要引入并注册这些第三方库提供的组件。

<script setup name="FilePreview">
import { ref, computed, defineProps } from "vue"
import { getToken } from "@/utils/auth"
import VueOfficeDocx from "@vue-office/docx"
import "@vue-office/docx/lib/index.css"
import VueOfficeExcel from "@vue-office/excel"
import "@vue-office/excel/lib/index.css"
import VueOfficePdf from "@vue-office/pdf"
import * as XLSX from "xlsx-js-style"
// 支持的文件类型数组
const supportedTypes = ["docx", "xlsx", "xls", "pdf", "jpg", "jpeg", "png", "txt", "mp4", "mp3"]

// 封装一个fetch方法,通过文件路径获取二进制文件内容
const getFileArrayBufferBySrc = async (src, useLocalToken = false) => {
  const headers = new Headers()
  if (useLocalToken) {
    headers.set("Authorization", `Bearer ${getToken()}`)
  }

  const res = await fetch(src, { headers })
  if (!res.ok) {
    throw new Error("请求失败")
  }
  return await res.arrayBuffer()
}

// 提取文件类型函数,通过文件路径获取文件扩展名
const extractFileType = path => {
  const dotIndex = path.lastIndexOf(".")
  return dotIndex !== -1 ? path.substring(dotIndex + 1) : "无文件扩展名"
}

// 验证URL是否有效的函数
const isValidUrl = url => {
   const pattern = new RegExp('^(https?:\/\/)?'+ // 协议
    '((([a-z\d]([a-z\d-]*[a-z\d])*)\.)+[a-z]{2,}|'+ // 域名
    '((\d{1,3}\.){3}\d{1,3}))'+ // IP
    '(\:\d+)?(\/[-a-z\d%_.~+]*)*'+ // 端口和路径
    '(\?[;&a-z\d%_.~+=-]*)?'+ // 查询字符串
    '(\#[-a-z\d_]*)?$','i'); // 锚点
  return !!pattern.test(url);
}

// 定义组件属性
// list可以是字符串数组[''],也可以是object数组[{name: '', src: ''}]
const props = defineProps({
  list: {
    type: Array,
    default: () => []
  }
})

// 文件预览对话框显示状态
const showFile = ref(false)
// 当前预览文件的源路径
const targetFileSrc = ref("")
// 当前活动的Sheet名称,用于Excel文件预览
const activeSheetName = ref(undefined)
// Excel文件数据
const xlsData = ref({})
// 文本文件数据
const txtData = ref(undefined)

// 处理文件列表,根据URL或对象生成统一的文件列表格式
const fileList = computed(() => {
  return props.list.map(item => {
    if (typeof item === "string") {
      const lastSlashIndex = item.lastIndexOf("/")
      const dotIndex = item.lastIndexOf(".")
      if (lastSlashIndex !== -1 && dotIndex !== -1 && lastSlashIndex < dotIndex) {
        const fileName = item.substring(lastSlashIndex + 1, dotIndex)
        const fileType = item.substring(dotIndex + 1)
        return { name: fileName, src: item, filetype: fileType }
      } else {
        return { name: "未知文件类型", src: item, filetype: "unknown" }
      }
    } else if (typeof item === "object" && item !== null && "src" in item) {
      const fileName = "name" in item ? item.name : "unknown"
      const fileType = extractFileType(item.src)
      return { name: fileName, src: item.src, filetype: fileType }
    } else {
      return { name: "unknown", src: "unknown", filetype: "unknown" }
    }
  })
})

// 处理文件预览
const handleShowFile = async item => {
  showFile.value = true
  targetFileSrc.value = item.src

  if (item.filetype === "xls") {
    const arrayBuffer = await getFileArrayBufferBySrc(item.src, false)
    const data = new Uint8Array(arrayBuffer)
    const workbook = XLSX.read(data, { type: "buffer" })
    activeSheetName.value = workbook.SheetNames[0]
    workbook.SheetNames.forEach(sheetName => {
      const worksheet = workbook.Sheets[sheetName]
      xlsData.value[sheetName] = XLSX.utils.sheet_to_json(worksheet)
    })
  } else if (item.filetype === "txt") {
    const arrayBuffer = await getFileArrayBufferBySrc(item.src, false)
    const decoder = new TextDecoder("utf-8")
    txtData.value = decoder.decode(arrayBuffer)
  }
}

// 处理文件下载
const downLoadFile = () => {
  if (!isValidUrl(targetFileSrc.value)) {
    console.error("下载路径不正确.")
    return
  }

  fetch(targetFileSrc.value, {
    method: "GET",
    headers: {
      Authorization: `Bearer ${getToken()}`,
      "Content-Type": "application/x-www-form-urlencoded"
    }
  })
    .then(response => {
      if (!response.ok) {
        throw new Error("网络连接失败")
      }
      // 将 Response 转换为 Blob
      return response.blob()
    })
    .then(data => {
      const reader = new FileReader()
      // 读取 blob 数据
      reader.readAsDataURL(data)
      // 读取 blob 数据为 Data URL
      reader.onloadend = function () {
        const a = document.createElement("a")
        a.href = reader.result
         // 设置为'_blank'以在新窗口或标签页中打开
        a.target = "_blank"
        // 安全问题
        a.rel = "noopenner noreferrer"
        const lastSlashIndex = targetFileSrc.value.lastIndexOf("/")
        const fileName = targetFileSrc.value.substring(lastSlashIndex + 1)
        a.download = fileName // 设置文件名
        a.click() // 触发下载
        handleClose()
      }
    })
    .catch(error => {
      console.error("下载失败:", error)
    })
}

// 关闭文件预览对话框
const handleClose = () => {
  showFile.value = false
  targetFileSrc.value = undefined
  activeSheetName.value = undefined
  xlsData.value = {}
  txtData.value = undefined
}
</script>
3. 样式

最后,我们添加一些 CSS 样式来美化我们的文件预览插件。

<style lang="scss" scoped>
$border-color: #e4e7ed;
$hover-bg: #f5f7fa;
$hover-color: #69b4ff;
$active-color: #409eff;

$file-preview-dialog-width: 100vw;
$file-preview-dialog-height: 100vh;

.filepreview-container {
  width: 100%;
  max-width: 1000px;
  overflow: auto;
  .file-list {
    .file-item {
      border: 1px solid $border-color;
      line-height: 2;
      margin-bottom: 10px;
      position: relative;
      // 省略号
      overflow: hidden;
      white-space: nowrap;
      text-overflow: ellipsis;
      padding: 0 10px;
      // hover
      transition: background-color 0.3s, color 0.3s;
      &:hover {
        background-color: $hover-bg;
        cursor: pointer;
        color: $hover-color;
      }
    }
  }
  .file-preview-dialog {
    width: $file-preview-dialog-width;
    height: $file-preview-dialog-height;
    background-color: rgba(0, 0, 0, 0.4);
    overflow: hidden;
    position: fixed;
    left: 0;
    top: 0;
    z-index: 999;
    display: flex;
    justify-content: center;
    align-items: center;
    .file-preview-content {
      width: 80vw;
      height: 90vh;
      background-color: #fff;
      border-radius: 5px;
      padding: 30px;
      display: flex;
      flex-flow: column;
      .file-box {
        flex: 1;
        height: calc(90vh - 80px - 60px);
        .file-content {
          width: 100%;
          height: 100%;
          display: flex;
          flex-flow: column;
          overflow: auto;
          background-color: #808080;
        }
        .xls-content {
          // 表格table的基础样式
          #tabs-container {
            width: 100%;
            height: 100%;
            background-color: #fff;
            display: flex;
            flex-direction: column;
            border: 1px solid $border-color;
            box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
            .tabs-header {
              width: 100%;
              display: flex;
              gap: 5px;
              background-color: #f2f2f2;
              padding: 5px 5px 0;
              .tab-item {
                padding: 8px 16px;
                cursor: pointer;
                border: 1px solid $border-color;
                border-bottom: none;
                color: #606266;
                font-size: 14px;
                line-height: 1.5;
                transition: all 0.3s;
                &.active {
                  background-color: white;
                  position: relative;
                  top: -1px; /* 下沉效果 */
                  border-bottom-color: transparent;
                  color: $active-color;
                  font-weight: bold;
                }
              }
            }
            .tabs-content {
              width: 100%;
              height: calc(100% - 36px); /* 减去头部高度 */
              padding: 10px;
              overflow: auto;
              border: 1px solid $border-color;
              border-top: none;
              .data-table {
                width: 100%;
                border-collapse: collapse;
                overflow: auto;
                font-size: 14px;
                color: #606266;
                th,
                td {
                  border: 1px solid $border-color;
                  padding: 8px;
                  text-align: left;
                  min-width: 100px;
                  min-height: 30px;
                  background-color: #fff;
                  vertical-align: middle;
                }
                th {
                  background-color: #f2f2f2;
                  color: #606266;
                  font-weight: bold;
                }
                tr:hover {
                  background-color: $hover-bg;
                }
              }
            }
          }
        }
        .img-content {
          > img {
            width: 100%;
            height: auto;
          }
        }
        .txt-content {
          font-size: 15px;
          line-height: 1.5;
          background-color: #fff;
        }
        .audio-content {
          display: flex;
          justify-content: center;
          align-items: center;
        }
        .empty-box {
          color: #aaaaaa;
          fill: currentColor;
          width: 100%;
          height: 100%;
          vertical-align: top;
          display: flex;
          flex-direction: column;
          justify-content: center;
          align-items: center;
        }
      }
      .file-box-btns {
        display: flex;
        flex-flow: row;
        justify-content: center;
        margin: 20px 0;
        > div {
          margin: 0 20px;
          background-color: $active-color;
          color: #fff;
          line-height: 40px;
          padding: 0 20px;
          border-radius: 4px;
          cursor: pointer;
          transition: background-color 0.3s;
          &:hover {
            background-color: lighten($active-color, 10%);
            color: #fff;
          }
        }
      }
    }
  }
}

// 响应式设计
@media (max-width: 768px) {
  .filepreview-container {
    max-width: 100%;
  }
  .file-preview-dialog {
    width: 100%;
    height: 100%;
    .file-preview-content {
      width: 90%;
      height: 80%;
      padding: 20px;
      .file-box {
        height: calc(80% - 40px - 40px);
        .file-content {
          height: 100%;
        }
      }
    }
  }
}
</style>

通过以上步骤,我们实现了一个功能齐全的前端文件预览插件。用户可以通过点击文件列表中的文件来查看其内容,并且可以下载文件。这个插件支持.docx.xlsx.pdf文件类型,并且可以根据需要轻松扩展以支持更多文件类型。

文件列表

word文档

excel预览(xlsx和xls不一致,xls无空白行数据及样式)

![20230926164408](data:image/png;base64,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

相关推荐
祈澈菇凉2 小时前
Webpack的基本功能有哪些
前端·javascript·vue.js
小纯洁w2 小时前
Webpack 的 require.context 和 Vite 的 import.meta.glob 的详细介绍和使用
前端·webpack·node.js
想睡好3 小时前
css文本属性
前端·css
qianmoQ3 小时前
第三章:组件开发实战 - 第五节 - Tailwind CSS 响应式导航栏实现
前端·css
zhoupenghui1683 小时前
golang时间相关函数总结
服务器·前端·golang·time
White graces3 小时前
正则表达式效验邮箱格式, 手机号格式, 密码长度
前端·spring boot·spring·正则表达式·java-ee·maven·intellij-idea
庸俗今天不摸鱼3 小时前
Canvas进阶-4、边界检测(流光,鼠标拖尾)
开发语言·前端·javascript·计算机外设
bubusa~>_<4 小时前
解决npm install 出现error,比如:ERR_SSL_CIPHER_OPERATION_FAILED
前端·npm·node.js
流烟默5 小时前
vue和微信小程序处理markdown格式数据
前端·vue.js·微信小程序
梨落秋溪、5 小时前
输入框元素覆盖冲突
java·服务器·前端