我有[]字节的zip文件。我必须解压缩它而不创建一个新的文件,并得到一个[]字节的解压缩文件。请帮助我做到这一点。
我正在进行一个API调用,得到的响应是压缩格式的[]byte-我正在尝试解压缩它-并使用它的内容创建一个新的zip文件。
语言:戈兰语
我使用的代码:
func UnzipBytes(zippedBytes []byte) ([]byte, error) {
reader := bytes.NewReader(zippedBytes)
zipReader, err := zlib.NewReader(reader)
if err != nil {
return nil, err
}
defer zipReader.Close()
p, err := ioutil.ReadAll(zipReader)
if err != nil {
return nil, err
}
return p, nil
}
我收到一个错误消息“zlib:无效标头”
最初用于压缩[]字节的代码
buffer := new(bytes.Buffer)
zipWriter := zip.NewWriter(buffer)
zipFile, err := zipWriter.Create(file.name)
_, err = zipFile.Write(file.content)
字节的十六进制转储-zippedBytes
00059350 78 b4 5b 0d 2b 81 c2 87 35 76 1b 11 4a ec 07 d1 |x.[.+...5v..J...|
00059360 76 77 a2 e1 3b d9 12 e2 51 d4 c5 bd 4b 2f 09 da |vw..;...Q...K/..|
00059370 f7 21 c7 26 73 1f 8e da f0 ff a3 52 f6 e2 00 e6 |.!.&s......R....|
1条答案
按热度按时间brccelvz1#
您使用了
zip.Writer
来压缩数据。您必须通过调用其Writer.Close()
方法来关闭它。您必须使用zip.Reader
来读取它,并使用与您压缩它时使用的名称相同的Reader.Open()
(file.name
)。它可能是这样的:
测试:
这将输出(在Go Playground上尝试):
如果你不知道解压缩文件的名字,你可以在
Reader.Files
文件头中看到所有的文件。你可以选择打开第一个文件:这个输出是一样的。在Go Playground上试试这个。