Go 创建带密码的zip压缩包

创建带密码的zip压缩包

package main
import (
"io"
"io/fs"
"log"
"os"
"path/filepath"
"strings"
"github.com/alexmullins/zip"
)
func init() {
log.SetFlags(log.Lshortfile | log.LstdFlags)
}
func compresses(source, destination string, password string) error {
zipFile, err := os.Create(destination)
if err != nil {
return err
}
defer zipFile.Close()
zipWriter := zip.NewWriter(zipFile)
defer zipWriter.Close()
return filepath.Walk(source, func(path string, info fs.FileInfo, err error) error {
if err != nil {
return err
}
if info.IsDir() {
return nil
}
header, err := zip.FileInfoHeader(info)
if err != nil {
return err
}
relativePath := strings.TrimPrefix(path, filepath.Dir(source)+"/")
header.Name = relativePath // 以相对路径保存到压缩包中
header.Method = zip.Deflate
header.Flags = 0x800 // 设置文件名称编码为UTF-8, 避免在Windows上解压后出现文件名乱码的问题
header.SetPassword(password) // 设置解压密码
writer, err := zipWriter.CreateHeader(header)
if err != nil {
return err
}
file, err := os.Open(path)
if err != nil {
return err
}
defer file.Close()
if _, err := io.Copy(writer, file); err != nil {
return err
}
return nil
})
}
func main() {
if err := compresses("./dir", "./dir.zip", "Passw0rd"); err != nil {
log.Fatalln(err)
}
}
posted @   liy36  阅读(131)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示