| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- import { resolveResourceUrl } from '@/utils/resourceUrl'
- const IMAGE_RE = /\.(png|jpe?g|gif|webp|bmp)$/i
- const VIDEO_RE = /\.(mp4|mov|m4v|webm|avi)$/i
- const PDF_RE = /\.pdf$/i
- /** 根据路径后缀判断附件类型 */
- export function resolveMediaKind(path) {
- const raw = (path || '').trim()
- if (!raw) return 'none'
- const p = raw.split('?')[0]
- if (IMAGE_RE.test(p)) return 'image'
- if (VIDEO_RE.test(p)) return 'video'
- if (PDF_RE.test(p)) return 'pdf'
- return 'file'
- }
- /** 从 URL 取文件名 */
- export function fileNameFromPath(path) {
- const p = (path || '').split('?')[0]
- const seg = p.split('/').filter(Boolean)
- if (!seg.length) return 'attachment'
- try {
- return decodeURIComponent(seg[seg.length - 1])
- } catch (e) {
- return seg[seg.length - 1]
- }
- }
- /** 在线预览完整 URL(/profile/** 后端 permitAll,可直接访问) */
- export function getOnlinePreviewUrl(path) {
- return resolveResourceUrl(path)
- }
- const FILE_PREVIEW_PAGE = '/package-a/file-preview/index'
- /**
- * 在线打开附件(不下载到本地)
- * H5:新窗口;小程序/App 跳转 web-view 页
- */
- export function openOnlinePreview(path, { title } = {}) {
- const url = getOnlinePreviewUrl(path)
- if (!url) {
- return Promise.reject(new Error('empty url'))
- }
- // #ifdef H5
- if (typeof window !== 'undefined') {
- window.open(url, '_blank')
- return Promise.resolve()
- }
- return Promise.reject(new Error('unsupported'))
- // #endif
- // #ifdef APP-PLUS
- if (typeof plus !== 'undefined' && plus.runtime) {
- plus.runtime.openURL(url)
- return Promise.resolve()
- }
- // #endif
- const q = [`url=${encodeURIComponent(url)}`]
- if (title) {
- q.push(`title=${encodeURIComponent(title)}`)
- }
- return new Promise((resolve, reject) => {
- uni.navigateTo({
- url: `${FILE_PREVIEW_PAGE}?${q.join('&')}`,
- success: () => resolve(),
- fail: reject
- })
- })
- }
|