diff --git a/server/api/v1/system/sys_auto_code.go b/server/api/v1/system/sys_auto_code.go index 3e1465629..6f0faeb07 100644 --- a/server/api/v1/system/sys_auto_code.go +++ b/server/api/v1/system/sys_auto_code.go @@ -304,8 +304,7 @@ func (autoApi *AutoCodeApi) InstallPlugin(c *gin.Context) { // @Router /autoCode/pubPlug [get] func (autoApi *AutoCodeApi) PubPlug(c *gin.Context) { plugName := c.Query("plugName") - snake := strings.ToLower(plugName) - zipPath, err := autoCodeService.PubPlug(snake) + zipPath, err := autoCodeService.PubPlug(plugName) if err != nil { global.GVA_LOG.Error("打包失败!", zap.Error(err)) response.FailWithMessage("打包失败"+err.Error(), c) diff --git a/server/service/system/sys_auto_code.go b/server/service/system/sys_auto_code.go index c79b0a788..bad4e4341 100644 --- a/server/service/system/sys_auto_code.go +++ b/server/service/system/sys_auto_code.go @@ -820,11 +820,11 @@ func (autoCodeService *AutoCodeService) PubPlug(plugName string) (zipPath string // 创建一个新的zip文件 // 判断目录是否存在 - webInfo, err := os.Stat(webPath) + _, err = os.Stat(webPath) if err != nil { return "", errors.New("web路径不存在") } - serverInfo, err := os.Stat(serverPath) + _, err = os.Stat(serverPath) if err != nil { return "", errors.New("server路径不存在") } @@ -842,72 +842,29 @@ func (autoCodeService *AutoCodeService) PubPlug(plugName string) (zipPath string zipWriter := zip.NewWriter(zipFile) defer zipWriter.Close() - // 创建一个新的文件头 - webHeader, err := zip.FileInfoHeader(webInfo) + webHeaderName := filepath.Join(plugName, "web", "plugin", plugName) + err = autoCodeService.doZip(zipWriter, webPath, webHeaderName) if err != nil { return } - - // 创建一个新的文件头 - serverHeader, err := zip.FileInfoHeader(serverInfo) + serverHeaderName := filepath.Join(plugName, "server", "plugin", plugName) + err = autoCodeService.doZip(zipWriter, serverPath, serverHeaderName) if err != nil { return } + return filepath.Join(global.GVA_CONFIG.AutoCode.Root, global.GVA_CONFIG.AutoCode.Server, fileName), nil +} - webHeader.Name = filepath.Join(plugName, "web", "plugin") - serverHeader.Name = filepath.Join(plugName, "server", "plugin") +/* +* - // 将文件添加到zip归档中 - _, err = zipWriter.CreateHeader(serverHeader) - _, err = zipWriter.CreateHeader(webHeader) - - // 遍历webPath目录并将所有非隐藏文件添加到zip归档中 - err = filepath.Walk(webPath, func(path string, info os.FileInfo, err error) error { - if err != nil { - return err - } - - // 跳过隐藏文件 - if strings.HasPrefix(info.Name(), ".") { - return nil - } - - // 创建一个新的文件头 - header, err := zip.FileInfoHeader(info) - if err != nil { - return err - } - - // 将文件头的名称设置为文件的相对路径 - rel, _ := filepath.Rel(webPath, path) - header.Name = filepath.Join(plugName, "web", "plugin", plugName, rel) - - // 将文件添加到zip归档中 - writer, err := zipWriter.CreateHeader(header) - if err != nil { - return err - } - - if info.IsDir() { - return nil - } - - // 打开文件并将其内容复制到zip归档中 - file, err := os.Open(path) - if err != nil { - return err - } - defer file.Close() - _, err = io.Copy(writer, file) - if err != nil { - return err - } - return nil - }) - if err != nil { - return - } + zipWriter zip写入器 + serverPath 存储的路径 + headerName 写有zip的路径 +* +*/ +func (autoCodeService *AutoCodeService) doZip(zipWriter *zip.Writer, serverPath, headerName string) (err error) { // 遍历serverPath目录并将所有非隐藏文件添加到zip归档中 err = filepath.Walk(serverPath, func(path string, info os.FileInfo, err error) error { if err != nil { @@ -927,7 +884,11 @@ func (autoCodeService *AutoCodeService) PubPlug(plugName string) (zipPath string // 将文件头的名称设置为文件的相对路径 rel, _ := filepath.Rel(serverPath, path) - header.Name = filepath.Join(plugName, "server", "plugin", plugName, rel) + header.Name = filepath.Join(headerName, rel) + // 目录需要拼上一个 "/" ,否则会出现一个和目录一样的文件在压缩包中 + if info.IsDir() { + header.Name += "/" + } // 将文件添加到zip归档中 writer, err := zipWriter.CreateHeader(header) if err != nil { @@ -951,8 +912,5 @@ func (autoCodeService *AutoCodeService) PubPlug(plugName string) (zipPath string return nil }) - if err != nil { - return - } - return filepath.Join(global.GVA_CONFIG.AutoCode.Root, global.GVA_CONFIG.AutoCode.Server, fileName), nil + return err }