From 4ea54ff27cac2445c1d91ab429dc2ce577b46568 Mon Sep 17 00:00:00 2001 From: iven Date: Sun, 10 May 2026 19:52:49 +0800 Subject: [PATCH] =?UTF-8?q?fix(web):=20=E5=AA=92=E4=BD=93=E5=BA=93?= =?UTF-8?q?=E5=9B=BE=E7=89=87=E4=B8=8D=E6=98=BE=E7=A4=BA=20=E2=80=94=20?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20/uploads=20Vite=20=E4=BB=A3=E7=90=86=20+?= =?UTF-8?q?=20=E4=BF=AE=E5=A4=8D=E8=B7=AF=E5=BE=84=E5=89=8D=E7=BC=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 前端图片 URL 使用 ./uploads/... 相对路径导致 404: 1. Vite 添加 /uploads 代理到后端 3000 端口 2. MediaLibrary 和 MediaPicker 图片 src 去掉 ./ 前缀 --- apps/web/src/components/MediaPicker/index.tsx | 5 +++-- apps/web/src/pages/health/MediaLibrary.tsx | 2 +- apps/web/vite.config.ts | 4 ++++ 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/apps/web/src/components/MediaPicker/index.tsx b/apps/web/src/components/MediaPicker/index.tsx index 7658ead..af0a897 100644 --- a/apps/web/src/components/MediaPicker/index.tsx +++ b/apps/web/src/components/MediaPicker/index.tsx @@ -59,7 +59,8 @@ export default function MediaPicker({ open, onClose, onSelect, accept = 'image/* const handleSelect = (item: MediaItem) => { const token = localStorage.getItem('access_token'); - const url = token ? `${item.storage_path}?token=${token}` : item.storage_path; + const rawPath = (item.storage_path || '').replace(/^\.\//, '/'); + const url = token ? `${rawPath}?token=${token}` : rawPath; onSelect(url, item); onClose(); }; @@ -138,7 +139,7 @@ export default function MediaPicker({ open, onClose, onSelect, accept = 'image/* { const token = localStorage.getItem('access_token'); - const base = item.thumbnail_path || item.storage_path; + const base = (item.thumbnail_path || item.storage_path || '').replace(/^\.\//, '/'); return token ? `${base}?token=${token}` : base; })()} alt={item.alt_text || item.filename} diff --git a/apps/web/src/pages/health/MediaLibrary.tsx b/apps/web/src/pages/health/MediaLibrary.tsx index 4964c4f..f2cafb3 100644 --- a/apps/web/src/pages/health/MediaLibrary.tsx +++ b/apps/web/src/pages/health/MediaLibrary.tsx @@ -158,7 +158,7 @@ export default function MediaLibrary() { cover={
toggleSelect(item.id)} style={{ height: 140, display: 'flex', alignItems: 'center', justifyContent: 'center', background: 'var(--ant-color-fill-quaternary, #f5f5f5)', overflow: 'hidden', position: 'relative', cursor: 'pointer' }}> {isImage(item.content_type) ? ( - {item.alt_text + {item.alt_text ) : ( )} diff --git a/apps/web/vite.config.ts b/apps/web/vite.config.ts index a8a5abb..88670bb 100644 --- a/apps/web/vite.config.ts +++ b/apps/web/vite.config.ts @@ -11,6 +11,10 @@ export default defineConfig({ target: "http://localhost:3000", changeOrigin: true, }, + "/uploads": { + target: "http://localhost:3000", + changeOrigin: true, + }, "/ws": { target: "ws://localhost:3000", ws: true,