You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
bit4sat/storage/zip.go

58 lines
989 B
Go

package storage
import (
"archive/zip"
"io"
"os"
)
func ZipFiles(files []FileUpload, w io.Writer) error {
zipWriter := zip.NewWriter(w)
defer zipWriter.Close()
// Add files to zip
for _, file := range files {
if err := AddFileToZip(zipWriter, file); err != nil {
return err
}
}
return nil
}
// https://golangcode.com/create-zip-files-in-go/
func AddFileToZip(zipWriter *zip.Writer, file FileUpload) error {
fileToZip, err := os.Open(GetStoreDestination(file.SHA256 + file.FileExt))
if err != nil {
return err
}
defer fileToZip.Close()
// get file info
info, err := fileToZip.Stat()
if err != nil {
return err
}
header, err := zip.FileInfoHeader(info)
if err != nil {
return err
}
// Reset original file name
header.Name = file.FileName
// Change to deflate for better compression
header.Method = zip.Deflate
writer, err := zipWriter.CreateHeader(header)
if err != nil {
return err
}
_, err = io.Copy(writer, fileToZip)
return nil
}