archive/zip
步骤如下:
os.Createzip.NewWriter(file)
示例,批量下载网络图片,保存到zip文件中,包含目录。
func TestZip(t *testing.T) {
file, err := os.Create("test.zip")
if err != nil {
fmt.Println(err)
return
}
defer file.Close()
zipwriter := zip.NewWriter(file)
defer zipwriter.Close()
fs := []struct{
Url, Name string
}{
{Url:"http://videoactivity.bookan.com.cn/photo_10_202011301057385583397829_t.jpg", Name:"/1/11/1.jpg"},
{Url:"http://videoactivity.bookan.com.cn/photo_46_202011292229184376672977_t.jpg", Name:"2.jpg"},
{Url:"http://videoactivity.bookan.com.cn/photo_46_202011292229229158424627_t.jpg", Name:"3.jpg"},
{Url:"http://videoactivity.bookan.com.cn/photo_46_202011292215023830368256_t.jpg", Name:"4.jpg"},
{Url:"http://videoactivity.bookan.com.cn/photo_46_202011291755419090055749_t.jpg", Name:"5.jpg"},
{Url:"http://videoactivity.bookan.com.cn/photo_46_202011291755420502426479_t.jpg", Name:"6.jpg"},
}
for _, f := range fs {
iowriter, err := zipwriter.Create(f.Name)
if err != nil {
if os.IsPermission(err) {
fmt.Println("权限不足: ", err)
return
}
fmt.Printf("Create file %s error: %s\n", f.Name, err.Error())
return
}
var content []byte
resp, err := http.Get(f.Url)
if err == nil {
content, err = ioutil.ReadAll(resp.Body)
if err != nil {
content = []byte("")
}
resp.Body.Close()
}
iowriter.Write(content)
}
// 创建空目录
zipwriter.Create("/name/dir/")
}
几点说明:
zipwriter.Create("/1/11/1.jpg")(e.g. C:)/\/name/dir/