Create & Init Project...
This commit is contained in:
60
app/admin/main/macross/tools/unzip.go
Normal file
60
app/admin/main/macross/tools/unzip.go
Normal file
@ -0,0 +1,60 @@
|
||||
package tools
|
||||
|
||||
import (
|
||||
"archive/zip"
|
||||
"go-common/library/log"
|
||||
"io"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
)
|
||||
|
||||
// Unzip unzip a file to the target directory.
|
||||
func Unzip(filePath string, targetDir string) (err error) {
|
||||
reader, err := zip.OpenReader(filePath)
|
||||
if err != nil {
|
||||
log.Error("ozip.OpenReader(%s) error(%v)", filePath, err)
|
||||
return
|
||||
}
|
||||
defer reader.Close()
|
||||
|
||||
err = os.MkdirAll(targetDir, 0755)
|
||||
if err != nil {
|
||||
log.Error("os.MkdirAll(%s) error(%v)", targetDir, err)
|
||||
return
|
||||
}
|
||||
|
||||
for _, file := range reader.File {
|
||||
path := filepath.Join(targetDir, file.Name)
|
||||
if strings.Contains(path, "__MACOSX") {
|
||||
continue
|
||||
}
|
||||
|
||||
if file.FileInfo().IsDir() {
|
||||
os.MkdirAll(path, file.Mode())
|
||||
continue
|
||||
} else {
|
||||
os.MkdirAll(filepath.Dir(path), 0755)
|
||||
}
|
||||
|
||||
fileReader, err := file.Open()
|
||||
if err != nil {
|
||||
log.Error("file.Open() error(%v)", err)
|
||||
return err
|
||||
}
|
||||
defer fileReader.Close()
|
||||
|
||||
targetFile, err := os.OpenFile(path, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, file.Mode())
|
||||
if err != nil {
|
||||
log.Error("os.OpenFile() error(%v)", err)
|
||||
return err
|
||||
}
|
||||
defer targetFile.Close()
|
||||
|
||||
if _, err := io.Copy(targetFile, fileReader); err != nil {
|
||||
log.Error("io.Copy() error(%v)", err)
|
||||
return err
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
Reference in New Issue
Block a user