diff --git a/server/service/sys_auto_code.go b/server/service/sys_auto_code.go index 41668ba7..addac403 100644 --- a/server/service/sys_auto_code.go +++ b/server/service/sys_auto_code.go @@ -88,14 +88,26 @@ func CreateTemp(autoCode model.AutoCodeStruct) (err error) { _ = f.Close() } - // 生成压缩包 - if err := utils.ZipFiles("./ginvueadmin.zip", fileList, ".", "."); err != nil { - return err - } - - // 移除中间文件 - if err := os.RemoveAll(autoPath); err != nil { - return err + defer func() { + // 移除中间文件 + if err := os.RemoveAll(autoPath); err != nil { + return + } + }() + if autoCode.AutoMoveFile { + // 判断是否需要自动转移 + for _, value := range dataList { + // 转移 + err := utils.FileMove(value.locationPath, value.autoCodePath) + if err != nil { + return err + } + } + } else { + // 打包 + if err := utils.ZipFiles("./ginvueadmin.zip", fileList, ".", "."); err != nil { + return err + } } return nil } diff --git a/server/utils/fileoperations.go b/server/utils/fileoperations.go new file mode 100644 index 00000000..311cbeee --- /dev/null +++ b/server/utils/fileoperations.go @@ -0,0 +1,63 @@ +package utils + +import ( + "errors" + "fmt" + "io/ioutil" + "os" + "path/filepath" +) + +// package fileOperations use File Operations + +// fileMove: 文件移动 +// src: 源位置 需要传入绝对路径 +// dst: 目标位置 需要传入绝对路径 +func fileMove(src string, dst string) error { + if !filepath.IsAbs(dst) && !filepath.IsAbs(src) { + return errors.New(fmt.Sprintf("%s or %s path is not abs", dst, src)) + } + return os.Rename(src, dst) +} + +// FileMove: 文件移动供外部调用 +// src: 源位置 绝对路径相对路径都可以 +// dst: 目标位置 绝对路径相对路径都可以 dst 必须为文件夹 +func FileMove(src string, dst string) error { + var err error + // 转化为绝对路径 + src, err = filepath.Abs(src) + if err != nil { + return err + } + dst, err = filepath.Abs(dst) + if err != nil { + return err + } + // 判断传入的是否是目录 + oSrc, err := os.Stat(src) + if err != nil { + return err + } + if !oSrc.IsDir() { + return errors.New(fmt.Sprintf("%s is not Dir", src)) + } + oDst, err := os.Stat(dst) + if err != nil { + return err + } + if !oDst.IsDir() { + return errors.New(fmt.Sprintf("%s is not Dir", dst)) + } + // 遍历指定目录下所有文件 + f, err := ioutil.ReadDir(src) + for _, file := range f { + nDst := filepath.Join(dst, file.Name()) + nSrc := filepath.Join(src, file.Name()) + err = fileMove(nSrc, nDst) + if err != nil { + return err + } + } + return err +}