fix: 测试页同时兼容 base64 与 URL 图片字段
直连 worker 返回 *_base64、经网关则改写为 *_url;统一 resolveImgSrc 后接口1/2/3/5/6 测试页都能正确显示结果图。 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -52,4 +52,35 @@
|
||||
}
|
||||
|
||||
window.downscaleImageFile = downscaleImageFile;
|
||||
|
||||
/**
|
||||
* 将接口返回的图片字段规范成 <img src> 可用值。
|
||||
* 同时兼容:
|
||||
* - 网关改写后的 *_url(http/https/相对路径)
|
||||
* - worker 直连的 *_base64(原始 base64,或已带 data:image/...;base64, 前缀)
|
||||
* @param {string|null|undefined} url
|
||||
* @param {string|null|undefined} b64
|
||||
* @param {string} [mimeHint='image/jpeg'] 原始 base64 时的 MIME 提示(会按魔数再嗅探)
|
||||
* @returns {string}
|
||||
*/
|
||||
function resolveImgSrc(url, b64, mimeHint) {
|
||||
var v = url || b64 || '';
|
||||
if (!v || typeof v !== 'string') return '';
|
||||
v = v.trim();
|
||||
if (!v) return '';
|
||||
// 已是可用 URL / data URI / blob / 协议相对 URL
|
||||
if (/^(https?:|blob:|data:|\/\/)/i.test(v)) return v;
|
||||
// 同站相对路径(仅匹配明确的 /static/...;勿把 JPEG base64 的 /9j/ 前缀当路径)
|
||||
if (/^\/static\//.test(v)) return v;
|
||||
// 原始 base64:去掉可能残留的 data URI 前缀后再拼,避免双重前缀导致无法显示
|
||||
var raw = v.replace(/^data:image\/[a-zA-Z0-9+.-]+;base64,/i, '');
|
||||
if (!raw) return '';
|
||||
var mime = mimeHint || 'image/jpeg';
|
||||
if (raw.indexOf('iVBOR') === 0) mime = 'image/png';
|
||||
else if (raw.indexOf('/9j/') === 0) mime = 'image/jpeg';
|
||||
else if (raw.indexOf('R0lGOD') === 0) mime = 'image/gif';
|
||||
else if (raw.indexOf('UklGR') === 0) mime = 'image/webp';
|
||||
return 'data:' + mime + ';base64,' + raw;
|
||||
}
|
||||
window.resolveImgSrc = resolveImgSrc;
|
||||
})();
|
||||
|
||||
Reference in New Issue
Block a user