Golang实现字节切片压缩:与指定解压缩方案逆向需求
Go实现字节切片压缩为字节切片的函数
你需要的是与指定解压缩功能相反的实现:将原始[]byte压缩为zip格式的[]byte,用于后续作为multipart表单数据上传。以下是符合要求的ZipBytes函数实现:
import ( "archive/zip" "bytes" "io" ) func ZipBytes(unzippedBytes []byte) ([]byte, error) { // 创建字节缓冲区存储压缩结果 var buf bytes.Buffer // 初始化Zip写入器 zipWriter := zip.NewWriter(&buf) // 创建Zip包内的文件条目,文件名可按需修改 fileEntry, err := zipWriter.Create("compressed_content") if err != nil { return nil, err } // 将原始字节切片写入Zip条目 _, err = fileEntry.Write(unzippedBytes) if err != nil { return nil, err } // 关闭写入器,确保所有数据刷新到缓冲区 if err := zipWriter.Close(); err != nil { return nil, err } return buf.Bytes(), nil }
关键说明
- 用
bytes.Buffer做内存级存储,无需写入本地文件,适合直接用于网络上传场景 - 必须调用
zipWriter.Close(),否则会导致Zip包结构不完整,无法正常解压缩 - 示例中使用
compressed_content作为Zip内的文件名,你可以根据业务需求修改为更合适的名称
扩展场景
如果需要同时压缩多个独立的字节切片(对应多个文件),可以在函数内多次调用zipWriter.Create()创建不同的文件条目,分别写入对应数据即可。
内容的提问来源于stack exchange,提问作者Pramit Pakhira
相关产品推荐
相关产品推荐

