From 94bba0c910bb8c18079d4b7d29d06cb7dbb4a1c5 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Sat, 12 Oct 2024 19:04:48 +0800 Subject: [PATCH] =?UTF-8?q?add:=20=E6=96=87=E4=BB=B6=E5=B7=A5=E5=85=B7tar?= =?UTF-8?q?=E5=8E=8B=E7=BC=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/framework/utils/file/tar.go | 76 +++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 src/framework/utils/file/tar.go diff --git a/src/framework/utils/file/tar.go b/src/framework/utils/file/tar.go new file mode 100644 index 00000000..22c3fb67 --- /dev/null +++ b/src/framework/utils/file/tar.go @@ -0,0 +1,76 @@ +package file + +import ( + "archive/tar" + "compress/gzip" + "io" + "os" + "path/filepath" +) + +// CompressTarGZByDir 将目录下文件添加到 tar.gz 压缩文件 +func CompressTarGZByDir(zipFilePath, dirPath string) error { + // 创建本地输出目录 + if err := os.MkdirAll(filepath.Dir(zipFilePath), 0775); err != nil { + return err + } + + // 创建输出文件 + tarFile, err := os.Create(zipFilePath) + if err != nil { + return err + } + defer tarFile.Close() + + gw := gzip.NewWriter(tarFile) + defer gw.Close() + + tw := tar.NewWriter(gw) + defer tw.Close() + + // 遍历目录下的所有文件和子目录 + err = filepath.Walk(dirPath, func(path string, info os.FileInfo, err error) error { + if err != nil { + return err + } + + // 忽略目录 + if info.IsDir() { + return nil + } + + // 创建文件条目 + header, err := tar.FileInfoHeader(info, "") + if err != nil { + return err + } + relPath, err := filepath.Rel(dirPath, path) + if err != nil { + return err + } + header.Name = relPath + if err := tw.WriteHeader(header); err != nil { + return err + } + if !info.Mode().IsRegular() { + return nil + } + + // 打开文件 + file, err := os.Open(path) + if err != nil { + return err + } + defer file.Close() + + // 写入文件内容 + _, err = io.Copy(tw, file) + if err != nil { + return err + } + + return nil + }) + + return err +}