From 2fda9616434e713b1855cf0732f4d00ebe23e5a5 Mon Sep 17 00:00:00 2001 From: wike2019 <200569525@qq.com> Date: Sat, 10 Jan 2026 16:00:10 +0800 Subject: [PATCH] =?UTF-8?q?io.Copy=20=E5=90=8E=E7=AB=8B=E5=8D=B3=E8=B0=83?= =?UTF-8?q?=E7=94=A8=20Unzip=EF=BC=8C=E4=BD=86=20out=20=E7=94=B1=20defer?= =?UTF-8?q?=20=E5=85=B3=E9=97=AD=EF=BC=8C=E5=8F=AF=E8=83=BD=E5=9C=A8?= =?UTF-8?q?=E8=A7=A3=E5=8E=8B=E6=97=B6=E5=B0=9A=E6=9C=AA=E5=85=B3=E9=97=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/service/system/auto_code_plugin.go | 33 ++++++++++++++++------- 1 file changed, 24 insertions(+), 9 deletions(-) diff --git a/server/service/system/auto_code_plugin.go b/server/service/system/auto_code_plugin.go index 3de4c6cc..0ce48d82 100644 --- a/server/service/system/auto_code_plugin.go +++ b/server/service/system/auto_code_plugin.go @@ -4,6 +4,15 @@ import ( "bytes" "context" "fmt" + "go/parser" + "go/printer" + "go/token" + "io" + "mime/multipart" + "os" + "path/filepath" + "strings" + "github.com/flipped-aurora/gin-vue-admin/server/global" "github.com/flipped-aurora/gin-vue-admin/server/model/system" "github.com/flipped-aurora/gin-vue-admin/server/model/system/request" @@ -13,14 +22,6 @@ import ( cp "github.com/otiai10/copy" "github.com/pkg/errors" "go.uber.org/zap" - "go/parser" - "go/printer" - "go/token" - "io" - "mime/multipart" - "os" - "path/filepath" - "strings" ) var AutoCodePlugin = new(autoCodePlugin) @@ -42,13 +43,27 @@ func (s *autoCodePlugin) Install(file *multipart.FileHeader) (web, server int, e } defer src.Close() + // 在临时目录创建目标文件 + // 使用完整路径拼接的好处:明确文件位置,避免路径混乱 out, err := os.Create(GVAPLUGPINATH + file.Filename) if err != nil { return -1, -1, err } - defer out.Close() + // 将上传的文件内容复制到临时文件 + // 使用io.Copy的好处:高效处理大文件,自动管理缓冲区,避免内存溢出 _, err = io.Copy(out, src) + if err != nil { + out.Close() + return -1, -1, err + } + + // 立即关闭文件,确保数据写入磁盘并释放文件句柄 + // 必须在解压前关闭,否则在Windows系统上会导致文件被占用无法解压 + err = out.Close() + if err != nil { + return -1, -1, err + } paths, err := utils.Unzip(GVAPLUGPINATH+file.Filename, GVAPLUGPINATH) paths = filterFile(paths)