Skip to content
Snippets Groups Projects
Select Git revision
  • 86923d94debfd7b81270d2706487e8c6d92b0937
  • main default protected
  • trading_hours
  • refactor_trading_hours
  • audit_cleaning_cater_for_non_struct_fields
  • remove-info-logs
  • sl-refactor
  • 18-use-scan-for-param-values
  • 17-order-search-results
  • 4-simplify-framework-2
  • 1-http-error
  • v1.297.0
  • v1.296.0
  • v1.295.0
  • v1.294.0
  • v1.293.0
  • v1.292.0
  • v1.291.0
  • v1.290.0
  • v1.289.0
  • v1.288.0
  • v1.287.0
  • v1.286.0
  • v1.285.0
  • v1.284.0
  • v1.283.0
  • v1.282.0
  • v1.281.0
  • v1.280.0
  • v1.279.0
  • v1.278.0
31 results

zip_utils.go

Blame
  • zip_utils.go 1.49 KiB
    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)