Browse Source

add filemove

add filemove
v_zhibsong 4 years ago
parent
commit
c1f2c6f618
2 changed files with 83 additions and 8 deletions
  1. 20 8
      server/service/sys_auto_code.go
  2. 63 0
      server/utils/fileoperations.go

+ 20 - 8
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
 }

+ 63 - 0
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
+}