feat: compress 新增 tar 和 zip 解压缩函数
This commit is contained in:
parent
1afae90f69
commit
6bd987fce5
|
@ -0,0 +1,48 @@
|
|||
package compress
|
||||
|
||||
import (
|
||||
"archive/tar"
|
||||
"bytes"
|
||||
"io"
|
||||
)
|
||||
|
||||
// TARCompress 对数据进行TAR压缩,返回bytes.Buffer和错误信息
|
||||
func TARCompress(data []byte) (bytes.Buffer, error) {
|
||||
var buf bytes.Buffer
|
||||
tarWriter := tar.NewWriter(&buf)
|
||||
hdr := &tar.Header{
|
||||
Name: "file",
|
||||
Mode: 0600,
|
||||
Size: int64(len(data)),
|
||||
}
|
||||
if err := tarWriter.WriteHeader(hdr); err != nil {
|
||||
return buf, err
|
||||
}
|
||||
if _, err := tarWriter.Write(data); err != nil {
|
||||
return buf, err
|
||||
}
|
||||
if err := tarWriter.Close(); err != nil {
|
||||
return buf, err
|
||||
}
|
||||
return buf, nil
|
||||
}
|
||||
|
||||
// TARUnCompress 对已进行TAR压缩的数据进行解压缩,返回字节数组及错误信息
|
||||
func TARUnCompress(dataByte []byte) ([]byte, error) {
|
||||
data := bytes.NewReader(dataByte)
|
||||
tarReader := tar.NewReader(data)
|
||||
var result bytes.Buffer
|
||||
for {
|
||||
_, err := tarReader.Next()
|
||||
if err == io.EOF {
|
||||
break // End of archive
|
||||
}
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if _, err := io.Copy(&result, tarReader); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
return result.Bytes(), nil
|
||||
}
|
|
@ -0,0 +1,47 @@
|
|||
package compress
|
||||
|
||||
import (
|
||||
"archive/zip"
|
||||
"bytes"
|
||||
"io"
|
||||
)
|
||||
|
||||
// ZIPCompress 对数据进行ZIP压缩,返回bytes.Buffer和错误信息
|
||||
func ZIPCompress(data []byte) (bytes.Buffer, error) {
|
||||
var buf bytes.Buffer
|
||||
zipWriter := zip.NewWriter(&buf)
|
||||
f, err := zipWriter.Create("file")
|
||||
if err != nil {
|
||||
return buf, err
|
||||
}
|
||||
_, err = f.Write(data)
|
||||
if err != nil {
|
||||
return buf, err
|
||||
}
|
||||
if err := zipWriter.Close(); err != nil {
|
||||
return buf, err
|
||||
}
|
||||
return buf, nil
|
||||
}
|
||||
|
||||
// ZIPUnCompress 对已进行ZIP压缩的数据进行解压缩,返回字节数组及错误信息
|
||||
func ZIPUnCompress(dataByte []byte) ([]byte, error) {
|
||||
data := bytes.NewReader(dataByte)
|
||||
zipReader, err := zip.NewReader(data, int64(len(dataByte)))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
var result bytes.Buffer
|
||||
for _, f := range zipReader.File {
|
||||
rc, err := f.Open()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
_, err = io.Copy(&result, rc)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
rc.Close()
|
||||
}
|
||||
return result.Bytes(), nil
|
||||
}
|
Loading…
Reference in New Issue