vue-office实现附件在线预览

      <a-modal
                title="预览"
                :footer="null"
                v-model:visible="previewState.previewVisible"
                @cancel="handleCancel"
                width="100vh"
                :body-style="{
                    maxHeight: '800px',
                    overflowY: 'auto'
                }"
                centered
            >
                <div v-if="previewState.isImagePreview">
                    <img :src="previewState.previewImage" alt="附件" style="width: 100%" />
                </div>
                <div v-if="previewState.isDocPreview">
                    <vue-office-docx
                        :src="previewState.previewFileUrl"
                        @rendered="renderedHandler"
                        @error="errorHandler"
                    />
                </div>
                <div v-if="previewState.isPdfPreview">
                    <vue-office-pdf
                        :src="previewState.previewFileUrl"
                        @rendered="renderedHandler"
                        @error="errorHandler"
                    />
                </div>
                <div v-if="previewState.isExcelPreview">
                    <vue-office-excel
                        :src="previewState.previewFileUrl"
                        :options="options"
                        @rendered="renderedHandler"
                        @error="errorHandler"
                    />
                </div>
                <div v-if="previewState.isViedoPreview">
                    <video
                        autoplay
                        :src="previewState.previewFileUrl"
                        id="video-player"
                        controls
                        controlslist="nodownload"
                    ></video>
                </div>
            </a-modal>
  <div
                                        class="file-div"
                                        v-for="(item, index) in record.fileList"
                                        @click="previewAttachment(item)"
                                    >
                                        {{ item.name }}</div
                                    >
                                        import VueOfficePdf from '@vue-office/pdf'
    import VueOfficeExcel from '@vue-office/excel'
    import VueOfficeDocx from '@vue-office/docx'
    const previewState = reactive({
        previewVisible: false,
        previewImage: '',
        previewFileUrl: '',
        isImagePreview: false,
        isDocPreview: false,
        isPdfPreview: false,
        isExcelPreview: false,
        isViedoPreview: false
    })
    function previewAttachment(item) {
        if (item.type.startsWith('image')) {
            previewState.isExcelPreview = false
            previewState.isImagePreview = true
            previewState.isDocPreview = false
            previewState.isViedoPreview = false
            previewState.isPdfPreview = false
            previewState.previewImage = item.url // 设置预览图片的URL
            previewState.previewVisible = true // 显示模态框
        } else if (isDocFile(item.name, '.pdf')) {
            previewState.isImagePreview = false
            previewState.isDocPreview = false
            previewState.isViedoPreview = false
            previewState.isPdfPreview = true
            previewState.isExcelPreview = false
            previewState.previewFileUrl = item.url // 设置预览PDF的URL
            previewState.previewVisible = true // 显示模态框
        } else if (isDocFile(item.name, '.doc')) {
            previewState.isImagePreview = false
            previewState.isDocPreview = true
            previewState.isViedoPreview = false
            previewState.isPdfPreview = false
            previewState.isExcelPreview = false
            previewState.previewFileUrl = item.url // 设置预览WORD的URL
            previewState.previewVisible = true // 显示模态框
        } else if (isDocFile(item.name, '.docx')) {
            previewState.isExcelPreview = false
            previewState.isImagePreview = false
            previewState.isViedoPreview = false
            previewState.isDocPreview = true
            previewState.isPdfPreview = false
            previewState.previewFileUrl = item.url // 设置预览WORD的URL
            previewState.previewVisible = true // 显示模态框
        } else if (isDocFile(item.name, '.xls')) {
            options.value.xls = true
            previewState.isViedoPreview = false
            previewState.isImagePreview = false
            previewState.isDocPreview = false
            previewState.isPdfPreview = false
            previewState.isExcelPreview = true
            previewState.previewFileUrl = item.url // 设置预览EXCEL的URL
            previewState.previewVisible = true // 显示模态框
        } else if (isDocFile(item.name, '.xlsx')) {
            options.value.xls = false
            previewState.isImagePreview = false
            previewState.isDocPreview = false
            previewState.isPdfPreview = false
            previewState.isViedoPreview = false
            previewState.isExcelPreview = true
            previewState.previewFileUrl = item.url // 设置预览EXCEL的URL
            previewState.previewVisible = true // 显示模态框
        } else if (item.type.startsWith('video')) {
            options.value.xls = false
            previewState.isImagePreview = false
            previewState.isDocPreview = false
            previewState.isPdfPreview = false
            previewState.isViedoPreview = true
            previewState.isExcelPreview = false
            previewState.previewFileUrl = item.url // 设置预览EXCEL的URL
            previewState.previewVisible = true // 显示模态框
        } else {
            message.warning('暂不支持的文件格式')
        }
    }
    function isDocFile(fileName, str) {
        return fileName.toLowerCase().endsWith(str)
    }
对于Vue项目中实现文件预览,你可以使用vue-office组件库。该组件库提供了丰富的功能,包括文件预览、编辑、保存等。 首先,你需要在你的Vue项目中安装vue-office组件库。可以通过npm安装: ``` npm install vue-office --save ``` 安装完成后,在你的Vue组件中引入并使用vue-office组件。例如,你可以创建一个名为PreviewFile.vue的组件: ```vue <template> <div> <vue-office :fileUrl="fileUrl" :fileType="fileType" :options="options"></vue-office> </div> </template> <script> import 'vue-office/dist/style.css'; import VueOffice from 'vue-office'; export default { name: 'PreviewFile', components: { VueOffice }, data() { return { fileUrl: 'https://example.com/your-file-url', fileType: 'pdf', // 文件类型,支持pdf、word、excel、ppt options: {} // 可选配置项,如编辑模式、保存回调等 }; } }; </script> ``` 在上面的示例中,你需要设置`fileUrl`为你要预览的文件的URL,`fileType`为文件类型(支持pdf、word、excel、ppt),`options`为可选配置项(例如编辑模式、保存回调等)。 请注意,这个示例假设你已经有一个文件服务器,并且可以通过URL访问到文件。如果你的文件是存储在本地或其他地方,请根据实际情况修改`fileUrl`。 最后,你可以在你的页面中使用PreviewFile组件来实现文件预览: ```vue <template> <div> <PreviewFile></PreviewFile> </div> </template> <script> import PreviewFile from './PreviewFile.vue'; export default { name: 'App', components: { PreviewFile } }; </script> ``` 这样,你就可以在Vue项目中实现文件预览功能了。记得根据你的需求修改`fileUrl`和`fileType`,以及其他可选配置项。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

屎山制造者2022

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值