diff --git a/g/encoding/gcompress/gcompress_file.go b/g/encoding/gcompress/gcompress_file.go index 236c8b8a3..6e6231200 100644 --- a/g/encoding/gcompress/gcompress_file.go +++ b/g/encoding/gcompress/gcompress_file.go @@ -8,6 +8,7 @@ package gcompress import ( "archive/zip" + "bytes" "github.com/gogf/gf/g/os/gfile" "io" "os" @@ -47,10 +48,24 @@ func ZipPath(path, dest string, prefix ...string) error { // UnZipFile decompresses to using zip compressing algorithm. func UnZipFile(archive, dest string) error { - reader, err := zip.OpenReader(archive) + readerCloser, err := zip.OpenReader(archive) if err != nil { return err } + defer readerCloser.Close() + return unZipFileWithReader(&readerCloser.Reader, dest) +} + +// UnZipContent decompresses to using zip compressing algorithm. +func UnZipContent(data []byte, dest string) error { + reader, err := zip.NewReader(bytes.NewReader(data), int64(len(data))) + if err != nil { + return err + } + return unZipFileWithReader(reader, dest) +} + +func unZipFileWithReader(reader *zip.Reader, dest string) error { if err := os.MkdirAll(dest, 0755); err != nil { return err } @@ -62,7 +77,7 @@ func UnZipFile(archive, dest string) error { } dir := filepath.Dir(path) if len(dir) > 0 { - if _, err = os.Stat(dir); os.IsNotExist(err) { + if _, err := os.Stat(dir); os.IsNotExist(err) { err = os.MkdirAll(dir, 0755) if err != nil { return err diff --git a/geg/encoding/gcompress/data.zip b/geg/encoding/gcompress/data.zip deleted file mode 100644 index 5da348056..000000000 Binary files a/geg/encoding/gcompress/data.zip and /dev/null differ diff --git a/geg/encoding/gcompress/unzip_content.go b/geg/encoding/gcompress/unzip_content.go new file mode 100644 index 000000000..1fa05f146 --- /dev/null +++ b/geg/encoding/gcompress/unzip_content.go @@ -0,0 +1,15 @@ +package main + +import ( + "fmt" + "github.com/gogf/gf/g/encoding/gcompress" + "github.com/gogf/gf/g/os/gfile" +) + +func main() { + err := gcompress.UnZipContent( + gfile.GetBinContents(`D:\Workspace\Go\GOPATH\src\github.com\gogf\gf\geg\encoding\gcompress\data.zip`), + `D:\Workspace\Go\GOPATH\src\github.com\gogf\gf\geg`, + ) + fmt.Println(err) +}