github.com/IBM-Cloud/bluemix-go@v0.0.0-20240314082800-4e02a69b84b2/helpers/zip.go (about) 1 package helpers 2 3 import ( 4 "archive/zip" 5 "io" 6 "os" 7 "path" 8 "path/filepath" 9 ) 10 11 //Unzip src to dest 12 func Unzip(src, dest string) error { 13 r, err := zip.OpenReader(src) 14 if err != nil { 15 return err 16 } 17 defer r.Close() 18 19 err = os.MkdirAll(dest, 0755) 20 if err != nil { 21 return err 22 } 23 24 for _, f := range r.File { 25 err := extractFileInZipArchive(dest, f) 26 if err != nil { 27 return err 28 } 29 } 30 31 return nil 32 } 33 34 func extractFileInZipArchive(dest string, f *zip.File) error { 35 rc, err := f.Open() 36 if err != nil { 37 return err 38 } 39 defer rc.Close() 40 41 path := filepath.Join(path.Clean(dest), path.Clean(f.Name)) 42 43 if f.FileInfo().IsDir() { 44 return os.MkdirAll(path, f.Mode()) 45 } 46 err = os.MkdirAll(filepath.Dir(path), f.Mode()) 47 if err != nil { 48 return err 49 } 50 zf, err := os.OpenFile(path, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, f.Mode()) 51 if err != nil { 52 return err 53 } 54 defer zf.Close() 55 _, err = io.Copy(zf, rc) 56 return err 57 }