Created
July 30, 2020 02:03
-
-
Save jeremysmitherman/5f0921a16f2a65251fd2c5f098bb9ab0 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package fileio | |
import ( | |
"archive/zip" | |
"fmt" | |
"io" | |
"os" | |
"path/filepath" | |
"strings" | |
) | |
type MizZipper interface { | |
Unzip(zipfile string, tmpDestFolder string) ([]string, error) | |
Zip(targetFolder string) | |
} | |
type dcsMizZipper struct {} | |
func NewDcsMizZipper() MizZipper { | |
return dcsMizZipper{} | |
} | |
func (m dcsMizZipper) Unzip(zipfile string, tmpDestFolder string) ([]string, error) { | |
readcloser, _ := zip.OpenReader(zipfile) | |
defer readcloser.Close() | |
var filenames []string | |
for _, f := range readcloser.File { | |
filename := filepath.Join(tmpDestFolder, f.Name) | |
err := os.MkdirAll(filepath.Dir(filename), os.ModePerm) | |
if err != nil { | |
return filenames, err | |
} | |
newFile, err := os.OpenFile(filename, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, f.Mode()) | |
if err != nil { | |
return filenames, err | |
} | |
rc, err := f.Open() | |
if err != nil { | |
return filenames, err | |
} | |
_, err = io.Copy(newFile, rc) | |
filenames = append(filenames,filename) | |
newFile.Close() | |
rc.Close() | |
if err != nil { | |
return filenames, err | |
} | |
} | |
return filenames, nil | |
} | |
func (m dcsMizZipper) Zip(targetFolder string) { | |
newZipFile, err := os.Create(d.Zipfile + "_copy") | |
if err != nil { | |
panic(err) | |
} | |
defer newZipFile.Close() | |
zipWriter := zip.NewWriter(newZipFile) | |
defer zipWriter.Close() | |
err = filepath.Walk(targetFolder, func(path string, info os.FileInfo, err error) error { | |
if !info.IsDir() { | |
file, err := os.Open(path) | |
if err != nil { | |
panic(err) | |
} | |
defer file.Close() | |
newInfo, err := file.Stat() | |
header, err := zip.FileInfoHeader(newInfo) | |
if err != nil { | |
panic(err) | |
} | |
header.Method = zip.Deflate | |
header.Name = strings.ReplaceAll(filepath.Clean(path), targetFolder + "\\", "") | |
fmt.Println(header.Name) | |
writer, err := zipWriter.CreateHeader(header) | |
if err != nil { | |
panic(err) | |
} | |
_, err = io.Copy(writer, file) | |
if err != nil { | |
panic(err) | |
} | |
} | |
return nil | |
}) | |
if err != nil { | |
panic(err) | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment