resolveMediaUrl.ts
1.35 KB
import { buildApiUrl, getStaticMediaOrigin } from './apiBase'
/** 相对路径拼后端根(含 H5 开发时的静态资源域名);绝对 URL / data URL 原样返回 */
export function resolveMediaUrlForApp(stored: string | null | undefined): string {
const s = (stored ?? '').trim()
if (!s) return ''
if (s.startsWith('data:')) return s
if (/^https?:\/\//i.test(s)) return s
const path = s.startsWith('/') ? s : `/${s}`
const mediaOrigin = getStaticMediaOrigin()
if (mediaOrigin) return `${mediaOrigin.replace(/\/$/, '')}${path}`
return buildApiUrl(path)
}
/**
* 判断模板里存的字符串是否应按「图片」加载(含平台上传后的 /picture/ 路径)。
* 用于 QRCODE 等元素:data 可能是「要编码的 URL 文本」,也可能是「已上传的二维码图」路径。
*/
export function storedValueLooksLikeImagePath(stored: string | null | undefined): boolean {
const s = (stored ?? '').trim()
if (!s) return false
const lower = s.toLowerCase()
if (lower.startsWith('data:image/')) return true
if (lower.startsWith('/picture/') || lower.startsWith('/static/')) return true
if (/\.(png|jpe?g|gif|webp|bmp)(\?|#|$)/i.test(s)) return true
if (/^https?:\/\//i.test(s)) {
if (/\/picture\//i.test(s)) return true
if (/\.(png|jpe?g|gif|webp|bmp)(\?|#|$)/i.test(s)) return true
return false
}
return false
}