Я использую сжатие / gzip для распаковки файлов
func DecompressZip(src string, target string) error {
f, err := os.Open(src)
if err != nil {
return errors.Wrap(err, "can't open tar source file:"+src)
}
defer f.Close()
zipReader, err := gzip.NewReader(f)
if err != nil {
return errors.Wrap(err, "can't gzip source file"+src)
}
defer zipReader.Close()
unzipFile, err := CreateFileAnyway(target) // return *os.file
if err != nil {
return errors.Wrap(err, "can't create target file"+target)
}
defer unzipFile.Close()
if _, err := io.Copy(unzipFile, zipReader); err != nil {
return errors.Wrap(err, "can't unzip to file :"+target)
}
return nil
}
func CreateFileAnyway(path string) (*os.File, error) {
if _, err := os.Stat(path); err == nil {
return os.Create(path)
} else {
i := len(path)
for i > 0 && !os.IsPathSeparator(path[i-1]) {
i--
}
if i > 0 {
if err := os.MkdirAll(path[:i], 0777); err != nil {
return nil, err
}
}
return os.Create(path)
}
}
этот код содержит ошибку на io.Copy
, журнал: can't unzip to file :***: write ***: cannot allocate memory
Файл zip 300M, разархивированный файл5G.Память: 2048M.