From 86923d94debfd7b81270d2706487e8c6d92b0937 Mon Sep 17 00:00:00 2001 From: jano3 <jano@bob.co.za> Date: Tue, 13 Jun 2023 11:04:48 +0200 Subject: [PATCH] Add zip_utils --- utils/utils.go | 70 +---------------------------------- zip_utils/zip_utils.go | 84 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 85 insertions(+), 69 deletions(-) create mode 100644 zip_utils/zip_utils.go diff --git a/utils/utils.go b/utils/utils.go index b537f81..64e0101 100644 --- a/utils/utils.go +++ b/utils/utils.go @@ -1,19 +1,14 @@ package utils import ( - "archive/zip" - "bytes" + "github.com/mohae/deepcopy" "gitlab.bob.co.za/bob-public-utils/bobgroup-go-utils/errors" "gitlab.bob.co.za/bob-public-utils/bobgroup-go-utils/string_utils" - "io/ioutil" "net/mail" "net/url" "os" "regexp" "strings" - "time" - - "github.com/mohae/deepcopy" ) // GetEnv is a helper function for getting environment variables with a default @@ -37,69 +32,6 @@ func CorsHeaders() map[string]string { } } -func ZipData(fileName string, data []byte) ([]byte, error) { - // Create zip - buf := new(bytes.Buffer) - - // Create a new zip archive. - zipWriter := zip.NewWriter(buf) - - header := &zip.FileHeader{ - Name: fileName, - Method: zip.Deflate, - Modified: time.Now(), - } - - // Write data - file, err := zipWriter.CreateHeader(header) - if err != nil { - return nil, err - } - _, err = file.Write(data) - if err != nil { - return nil, err - } - - // Close zip - err = zipWriter.Close() - if err != nil { - return []byte(""), err - } - - return buf.Bytes(), nil -} - -func UnzipData(data []byte) (map[string][]byte, error) { - // Create a new zip reader. - zipReader, err := zip.NewReader(bytes.NewReader(data), int64(len(data))) - if err != nil { - return nil, err - } - - // Read all the files from zip archive - var fileData = make(map[string][]byte) - for _, zipFile := range zipReader.File { - unzippedData, err := readZipFile(zipFile) - if err != nil { - continue - } - - fileData[zipFile.FileHeader.Name] = unzippedData - } - - return fileData, nil -} - -func readZipFile(zipFile *zip.File) ([]byte, error) { - zipFileData, err := zipFile.Open() - if err != nil { - return nil, err - } - defer zipFileData.Close() - - return ioutil.ReadAll(zipFileData) -} - func DeepCopy(fromValue interface{}) (toValue interface{}) { return deepcopy.Copy(fromValue) } diff --git a/zip_utils/zip_utils.go b/zip_utils/zip_utils.go new file mode 100644 index 0000000..7edc3e6 --- /dev/null +++ b/zip_utils/zip_utils.go @@ -0,0 +1,84 @@ +package zip_utils + +import ( + "archive/zip" + "bytes" + "io" + "time" +) + +func ZipData(fileName string, data []byte) ([]byte, error) { + // Create zip + buf := new(bytes.Buffer) + + // Create a new zip archive. + zipWriter := zip.NewWriter(buf) + + header := &zip.FileHeader{ + Name: fileName, + Method: zip.Deflate, + Modified: time.Now(), + } + + // Write data + file, err := zipWriter.CreateHeader(header) + if err != nil { + return nil, err + } + _, err = file.Write(data) + if err != nil { + return nil, err + } + + // Close zip + err = zipWriter.Close() + if err != nil { + return []byte(""), err + } + + return buf.Bytes(), nil +} + +func UnzipData(data []byte) (map[string][]byte, error) { + // Create a new zip reader. + zipReader, err := zip.NewReader(bytes.NewReader(data), int64(len(data))) + if err != nil { + return nil, err + } + + // Read all the files from zip archive + var fileData = make(map[string][]byte) + for _, zipFile := range zipReader.File { + unzippedData, err := readZipFile(zipFile) + if err != nil { + continue + } + + fileData[zipFile.FileHeader.Name] = unzippedData + } + + return fileData, nil +} + +func readZipFile(zipFile *zip.File) ([]byte, error) { + zipFileData, err := zipFile.Open() + if err != nil { + return nil, err + } + defer zipFileData.Close() + + return io.ReadAll(zipFileData) +} + +func AddFileToZip(fileName string, fileBytes []byte, zipWriter *zip.Writer) error { + file, err := zipWriter.Create(fileName) + if err != nil { + return err + } + _, err = file.Write(fileBytes) + if err != nil { + return err + } + + return nil +} -- GitLab