From 6be636f3c0de239c99d580a391ec92351db71ed3 Mon Sep 17 00:00:00 2001 From: dujie <2262240028@qq.com> Date: Wed, 12 Apr 2023 11:41:01 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90fix=20bug=E3=80=9166408=20=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E4=B8=8A=E4=BC=A0=E7=BB=84=E4=BB=B6JUpload=E9=A2=84?= =?UTF-8?q?=E8=A7=88=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jero-web/src/components/jero/JUpload.vue | 40 +++++++++++++++++------- jero-web/src/utils/previewPdf.js | 14 +++++++++ 2 files changed, 42 insertions(+), 12 deletions(-) create mode 100644 jero-web/src/utils/previewPdf.js diff --git a/jero-web/src/components/jero/JUpload.vue b/jero-web/src/components/jero/JUpload.vue index 3693065c..7db17412 100644 --- a/jero-web/src/components/jero/JUpload.vue +++ b/jero-web/src/components/jero/JUpload.vue @@ -32,6 +32,12 @@ +
+
+ +
+
+ @@ -41,11 +47,14 @@ import Vue from 'vue' import { ACCESS_TOKEN } from '@/store/mutation-types' -import { getFileAccessHttpUrl } from '@/api/manage' +import { getFileAccessHttpUrl, downloadFile } from '@/api/manage' +import { previewPdf } from '@/utils/previewPdf' import JImagePreviewModal from '@comp/jero/modal/JImagePreviewModal.vue' const FILE_TYPE_ALL = 'all' const FILE_TYPE_IMG = 'image' +const FILE_TYPE_IMGS = ['jpg', 'jpeg', 'png', 'raw'] +const FILE_TYPE_PDF = 'pdf' // const uidGenerator = () => { // return '-' + parseInt(Math.random() * 10000 + 1 + '', 10) @@ -55,7 +64,7 @@ const Base64 = require('js-base64').Base64 // 支持预览的文件类型 const CAN_PREVIEW_FILE_TYPE = ['pdf', 'image'] -// 支持预览的文件后缀 +// 不支持预览的文件后缀 const CAN_PREVIEW_FILE_SUFFIX = ['doc', 'docx', 'xls', 'xlsx', 'ppt', 'pptx', 'txt', 'mp3', 'mp4', 'flv'] export default { @@ -67,8 +76,10 @@ export default { headers: {}, fileList: [], newFileList: [], + image: false, uploadGoOn: true, - containerId: null + containerId: null, + imageUrl: null } }, props: { @@ -287,6 +298,8 @@ export default { } return file }) + } else { + this.$message.error(info.file.response.message) } // this.$message.success(`${info.file.name} 上传成功!`); } else if (info.file.status === 'error') { @@ -333,7 +346,7 @@ export default { const fileSuffix = file.name ? file.name.split('.')[file.name.split('.').length - 1] : '' const canPreview = fileType ? CAN_PREVIEW_FILE_TYPE.some(tt => fileType.indexOf(tt) !== -1) : CAN_PREVIEW_FILE_SUFFIX.some(tt => fileSuffix === tt) // 判断是否为可预览格式的文件 - if (!canPreview) { + if (canPreview) { this.$message.loading('该文件类型不支持预览,正在为您准备下载...').then(() => { this.handleDownload(file) }) @@ -341,13 +354,18 @@ export default { } const fileFullUrl = `${window._CONFIG.domianWebSocketURL}/sys/common/download/${file.response.result.id}?token=${Vue.ls.get(ACCESS_TOKEN)}&fullfilename=${file.name}` // 图片预览,使用自己添加的组件 - if (fileType && fileType.indexOf(FILE_TYPE_IMG) !== -1) { - this.$refs.imagePreviewModal.open(fileFullUrl) + if (!canPreview && FILE_TYPE_IMGS.includes(fileSuffix)) { + this.imageUrl = getFileAccessHttpUrl(file.response.result.id) + // 获取viewer实例 + const viewer = this.$el.querySelector('.image').$viewer + // 调用show方法进行显示预览图 + viewer.show() + // this.$refs.imagePreviewModal.open(file) return } // pdf预览 - if (fileType && fileType.indexOf('pdf') !== -1) { - const url = `/pdfjs/web/viewer.html?file=${encodeURIComponent(fileFullUrl)}` + if (!canPreview && FILE_TYPE_PDF.includes(fileSuffix)) { + const url = previewPdf(file.response.result.id) window.open(url) return } @@ -356,10 +374,8 @@ export default { window.open(url) }, handleDownload (file) { - if (file && file.url) { - const fileFullUrl = `${window._CONFIG.domianWebSocketURL}/sys/common/download/${file.response.result.id}?token=${Vue.ls.get(ACCESS_TOKEN)}&fullfilename=${file.name}` - window.open(fileFullUrl) - } + // 下载文件 + downloadFile(`/sys/common/download/${file.response.result.id}`, file.name) } }, mounted () { diff --git a/jero-web/src/utils/previewPdf.js b/jero-web/src/utils/previewPdf.js new file mode 100644 index 00000000..a7a8ac09 --- /dev/null +++ b/jero-web/src/utils/previewPdf.js @@ -0,0 +1,14 @@ +import { ACCESS_TOKEN } from '@/store/mutation-types' +import Vue from 'vue' + +const getToken = () => Vue.ls.get(ACCESS_TOKEN) + +// 预览pdf +const previewPdf = (id) => { + const url = `${window._CONFIG.domianURL}/sys/common/download/${id}?type=view&token=${getToken()}` + return `${process.env.BASE_URL}pdfjs/web/viewer.html?file=` + encodeURIComponent(url) + '&.pdf' +} + +export { + previewPdf +}