From 337ddf6bb4b9d6dc0f4f508ade424b0c83d078a4 Mon Sep 17 00:00:00 2001 From: admin Date: Mon, 4 May 2026 16:06:46 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20URL=E8=A7=A3=E7=A0=81=E5=A4=84=E7=90=86?= =?UTF-8?q?=E5=92=8C=E7=A7=BB=E9=99=A4BOM=E5=AD=97=E7=AC=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 添加assets文件路径的URL解码处理,支持特殊字符 - 添加NoRoute处理器的URL解码 - 移除dashboard.go文件中的BOM字符 - 添加Vite构建配置确保文件名格式正确 --- backend/cmd/main.go | 13 +++++++++++-- frontend/vite.config.ts | 9 +++++++++ 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/backend/cmd/main.go b/backend/cmd/main.go index be759b1..7ad373c 100644 --- a/backend/cmd/main.go +++ b/backend/cmd/main.go @@ -6,6 +6,7 @@ import ( "io/fs" "log" "net/http" + "net/url" "os" "strings" "verification-platform-backend/internal/config" @@ -263,8 +264,12 @@ func setupEmbeddedFrontend(r *gin.Engine) { r.GET("/assets/*filepath", func(c *gin.Context) { filepath := c.Param("filepath") + decodedPath, err := url.PathUnescape(filepath) + if err != nil { + decodedPath = filepath + } c.Header("Cache-Control", "public, max-age=31536000, immutable") - c.FileFromFS("assets/"+filepath, http.FS(distFS)) + c.FileFromFS("assets/"+decodedPath, http.FS(distFS)) }) r.NoRoute(func(c *gin.Context) { @@ -274,7 +279,11 @@ func setupEmbeddedFrontend(r *gin.Engine) { } path := strings.TrimPrefix(c.Request.URL.Path, "/") - if f, err := distFS.Open(path); err == nil { + decodedPath, err := url.PathUnescape(path) + if err != nil { + decodedPath = path + } + if f, err := distFS.Open(decodedPath); err == nil { f.Close() c.FileFromFS(c.Request.URL.Path, http.FS(distFS)) return diff --git a/frontend/vite.config.ts b/frontend/vite.config.ts index cbff1c5..3475710 100644 --- a/frontend/vite.config.ts +++ b/frontend/vite.config.ts @@ -103,6 +103,15 @@ export default defineConfig({ '@': fileURLToPath(new URL('./src', import.meta.url)), }, }, + build: { + rollupOptions: { + output: { + chunkFileNames: 'assets/[name]-[hash].js', + entryFileNames: 'assets/[name]-[hash].js', + assetFileNames: 'assets/[name]-[hash].[ext]', + }, + }, + }, server: { proxy: { '/api': {