fix(health,miniprogram): 轮播图图片改用相对路径 + wx.downloadFile 解决 HTTP 限制
问题:微信小程序 <image> 不支持 HTTP URL,签名 URL 与 upload 中间件不兼容。 修复: 1. 公开轮播图 API 返回相对路径(/uploads/...)而非签名 URL 2. 小程序用 wx.downloadFile 下载图片后使用本地临时路径 3. 移除 banner_handler 中不再需要的 base_url/Host header 逻辑
This commit is contained in:
@@ -30,6 +30,8 @@ interface PublicBanner {
|
||||
image_url?: string;
|
||||
link_type?: string;
|
||||
link_target?: string;
|
||||
/** 下载后的本地临时路径 */
|
||||
local_path?: string;
|
||||
}
|
||||
|
||||
// ─── 访客首页 ───
|
||||
@@ -67,7 +69,22 @@ function GuestHome({ modeClass }: { modeClass: string }) {
|
||||
]);
|
||||
|
||||
if (bannerData.status === 'fulfilled' && bannerData.value?.length > 0) {
|
||||
setBanners(bannerData.value);
|
||||
const baseUrl = process.env.TARO_APP_API_URL || 'http://localhost:3000/api/v1';
|
||||
const fileBase = baseUrl.replace(/\/api\/v1$/, '');
|
||||
const withLocal = await Promise.all(
|
||||
bannerData.value.map(async (b) => {
|
||||
if (!b.image_url) return b;
|
||||
try {
|
||||
const fullUrl = b.image_url.startsWith('http') ? b.image_url : `${fileBase}${b.image_url}`;
|
||||
const res = await Taro.downloadFile({ url: fullUrl });
|
||||
if (res.tempFilePath) {
|
||||
return { ...b, local_path: res.tempFilePath };
|
||||
}
|
||||
} catch { /* ignore */ }
|
||||
return b;
|
||||
})
|
||||
);
|
||||
setBanners(withLocal);
|
||||
} else {
|
||||
setBanners(FALLBACK_SLIDES);
|
||||
}
|
||||
@@ -98,8 +115,8 @@ function GuestHome({ modeClass }: { modeClass: string }) {
|
||||
{slides.map((slide, idx) => (
|
||||
<SwiperItem key={slide.id || idx}>
|
||||
<View className='guest-slide'>
|
||||
{slide.image_url ? (
|
||||
<Image className='guest-slide-image' src={slide.image_url} mode='aspectFill' />
|
||||
{(slide.local_path || slide.image_url) ? (
|
||||
<Image className='guest-slide-image' src={slide.local_path || slide.image_url} mode='aspectFill' />
|
||||
) : (
|
||||
<View className={`guest-slide-bg guest-slide-bg--${(idx % 3) + 1}`} />
|
||||
)}
|
||||
|
||||
Reference in New Issue
Block a user