fix: 修复分享链接里的文件没有使用预览配置打开的问题

This commit is contained in:
jmal 2024-11-30 15:56:22 +08:00
parent b832e4fd7d
commit b36e2b8231
3 changed files with 44 additions and 18 deletions

View File

@ -4342,7 +4342,7 @@ export default {
this.$emit('selectedFile', selectFile) this.$emit('selectedFile', selectFile)
return return
} }
const fileHandler = this.hasIframePreview(row.suffix, this.$store.getters.iframePreviewConfig) const fileHandler = fileConfig.hasIframePreview(row.suffix, this.$store.getters.iframePreviewConfig)
if (fileHandler !== null) { if (fileHandler !== null) {
// iframe 预览 // iframe 预览
this.iframePreviewVisible = true this.iframePreviewVisible = true
@ -4425,18 +4425,6 @@ export default {
} }
return this.notPreviewDialogVisible; return this.notPreviewDialogVisible;
}, },
hasIframePreview(suffix, fileHandlers) {
// 将 suffix 转换为小写
const lowerCaseSuffix = suffix.toLowerCase();
for (let key in fileHandlers) {
// 将 key 中的扩展名全部转换为小写
const extensions = key.split(',').map(extension => extension.toLowerCase());
if (extensions.includes(lowerCaseSuffix)) {
return fileHandlers[key];
}
}
return null;
},
determineDownload(file) { determineDownload(file) {
this.download(file) this.download(file)
this.notPreviewDialogVisible = false this.notPreviewDialogVisible = false

View File

@ -117,4 +117,22 @@ export default {
const queryShareToken = shareToken ? `?share-token=${shareToken}` : '' const queryShareToken = shareToken ? `?share-token=${shareToken}` : ''
return window.location.origin + `${this.baseUrl}/public/s/${fileId}/packageDownload/${downloadName}${queryShareToken}` return window.location.origin + `${this.baseUrl}/public/s/${fileId}/packageDownload/${downloadName}${queryShareToken}`
}, },
/**
* 判断是否有iframe预览
* @param suffix 文件后缀
* @param fileHandlers 文件处理器
* @returns {*|null} 文件处理器
*/
hasIframePreview: function(suffix, fileHandlers) {
// 将 suffix 转换为小写
const lowerCaseSuffix = suffix.toLowerCase();
for (let key in fileHandlers) {
// 将 key 中的扩展名全部转换为小写
const extensions = key.split(',').map(extension => extension.toLowerCase());
if (extensions.includes(lowerCaseSuffix)) {
return fileHandlers[key];
}
}
return null;
},
} }

View File

@ -263,7 +263,13 @@
<image-viewer :fileList="fileList" :shareId="shareId" :file="imagePreviewRow" <image-viewer :fileList="fileList" :shareId="shareId" :file="imagePreviewRow"
:status.sync="imagePreviewVisible"></image-viewer> :status.sync="imagePreviewVisible"></image-viewer>
<video-preview :file="videoPreviewRow" :shareId="shareId" :status.sync="videoPreviewVisible"></video-preview> <video-preview :file="videoPreviewRow" :shareId="shareId" :status.sync="videoPreviewVisible"></video-preview>
<iframe-preview :file="officePreviewRow" :shareId="shareId" :sharer="sharerUsername" :status.sync="officePreviewVisible"></iframe-preview> <iframe-preview
:file="iframePreviewRow"
:fileHandler="fileHandler"
:shareId="shareId"
:sharer="sharerUsername"
:status.sync="iframePreviewVisible"
></iframe-preview>
<el-divider v-if="!linkFailed && !showShareCode" class="grid-divider" content-position="center"><i <el-divider v-if="!linkFailed && !showShareCode" class="grid-divider" content-position="center"><i
class="el-icon-folder-opened"></i>&nbsp;{{ summaries }} class="el-icon-folder-opened"></i>&nbsp;{{ summaries }}
</el-divider> </el-divider>
@ -419,8 +425,9 @@ export default {
imagePreviewVisible: false, imagePreviewVisible: false,
videoPreviewRow: {}, videoPreviewRow: {},
videoPreviewVisible: false, videoPreviewVisible: false,
officePreviewRow: {}, iframePreviewRow: {},
officePreviewVisible: false, iframePreviewVisible: false,
fileHandler: {},
audioPreviewRow: {}, audioPreviewRow: {},
audioPreviewVisible: false, audioPreviewVisible: false,
showUpdateDateItem: this.$pc,// 列表模式下是否显示修改时间 showUpdateDateItem: this.$pc,// 列表模式下是否显示修改时间
@ -431,6 +438,7 @@ export default {
sharerAvatarUrl: '', sharerAvatarUrl: '',
netdiskName: 'JmalCloud', netdiskName: 'JmalCloud',
netdiskLogo: '', netdiskLogo: '',
iframePreviewConfig: '',
showShareCode: false, showShareCode: false,
shareData: {}, shareData: {},
extractionCode: '', extractionCode: '',
@ -707,6 +715,9 @@ export default {
if (this.sharer.netdiskName) { if (this.sharer.netdiskName) {
this.netdiskName = this.sharer.netdiskName this.netdiskName = this.sharer.netdiskName
} }
if (this.sharer.iframe) {
this.iframePreviewConfig = JSON.parse(this.sharer.iframe)
}
this.sharerUsername = this.sharer.username this.sharerUsername = this.sharer.username
if (this.sharer.netdiskLogo) { if (this.sharer.netdiskLogo) {
this.netdiskLogo = this.sharer.netdiskLogo this.netdiskLogo = this.sharer.netdiskLogo
@ -1074,6 +1085,15 @@ export default {
this.pushRouter() this.pushRouter()
this.accessShareOpenDir(row.id) this.accessShareOpenDir(row.id)
} else { } else {
const fileHandler = fileConfig.hasIframePreview(row.suffix, this.iframePreviewConfig)
console.log(fileHandler, this.iframePreviewConfig)
if (fileHandler !== null) {
// iframe 预览
this.iframePreviewVisible = true
this.iframePreviewRow = row
this.fileHandler = fileHandler
return
}
if (row.contentType.startsWith('image')) { if (row.contentType.startsWith('image')) {
// 图片 // 图片
this.imagePreviewVisible = true this.imagePreviewVisible = true
@ -1100,8 +1120,8 @@ export default {
// office文件 // office文件
if (row.contentType.indexOf('office') > -1 || suffix.iframePreviewFile.includes(row.suffix)) { if (row.contentType.indexOf('office') > -1 || suffix.iframePreviewFile.includes(row.suffix)) {
// office文件 // office文件
this.officePreviewVisible = true this.iframePreviewVisible = true
this.officePreviewRow = row this.iframePreviewRow = row
return return
} }
// 打开文件 // 打开文件