diff --git a/src/framework/utils/file/zip.go b/src/framework/utils/file/zip.go index eac438f5..f5a3ec00 100644 --- a/src/framework/utils/file/zip.go +++ b/src/framework/utils/file/zip.go @@ -8,6 +8,52 @@ import ( "path/filepath" ) +// UnZip 解 ZIP 压缩文件输出到目录下 +func UnZip(zipFilePath, dirPath string) error { + // 打开ZIP文件进行读取 + r, err := zip.OpenReader(zipFilePath) + if err != nil { + return err + } + defer r.Close() + + // 创建本地输出目录 + if err := os.MkdirAll(dirPath, 0775); err != nil { + return err + } + + // 遍历ZIP文件中的每个文件并解压缩到输出目录 + for _, f := range r.File { + // 打开ZIP文件中的文件 + rc, err := f.Open() + if err != nil { + return err + } + defer rc.Close() + + // 创建解压后的文件 + path := filepath.Join(dirPath, f.Name) + if f.FileInfo().IsDir() { + // 如果是目录,创建目录 + os.MkdirAll(path, f.Mode()) + } else { + // 如果是文件,创建文件并写入内容 + file, err := os.OpenFile(path, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, f.Mode()) + if err != nil { + return err + } + defer file.Close() + + _, err = io.Copy(file, rc) + if err != nil { + return err + } + } + } + + return nil +} + // CompressZipByFile 将单文件添加到 ZIP 压缩文件 func CompressZipByFile(zipFilePath, filePath string) error { // 创建一个新的 ZIP 文件