1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- package utils
- import (
- "archive/zip"
- "errors"
- "fmt"
- "io"
- "os"
- "path/filepath"
- )
- // 解压文件
- func Unzip(src string) error {
- err := unzipFile(src, unzipTmp)
- if err != nil {
- fmt.Println("解压失败:", err)
- // 删除临时文件
- os.RemoveAll(unzipTmp)
- os.Remove(src)
- return errors.New("解压失败")
- }
- // 替换新旧文件
- os.RemoveAll(appPath)
- os.Rename(unzipTmp, appPath)
- // 删除下载的压缩文件
- os.Remove(src)
- // fmt.Println("解压成功!")
- return nil
- }
- func unzipFile(zipFile, destDir string) error {
- r, err := zip.OpenReader(zipFile)
- if err != nil {
- return err
- }
- defer r.Close()
- for _, f := range r.File {
- // 构建解压后的文件路径
- filePath := filepath.Join(destDir, f.Name)
- if f.FileInfo().IsDir() {
- // 创建目录
- os.MkdirAll(filePath, os.ModePerm)
- continue
- }
- // 创建父目录
- os.MkdirAll(filepath.Dir(filePath), os.ModePerm)
- // 打开zip文件中的文件
- rc, err := f.Open()
- if err != nil {
- return err
- }
- defer rc.Close()
- // 创建解压后的文件
- outFile, err := os.Create(filePath)
- if err != nil {
- return err
- }
- defer outFile.Close()
- // 将zip文件中的内容复制到解压后的文件中
- _, err = io.Copy(outFile, rc)
- if err != nil {
- return err
- }
- }
- return nil
- }
|