From e902d0a1560cba5eac92a1e5ebe435f6f823e783 Mon Sep 17 00:00:00 2001 From: songzhibin97 <718428482@qq.com> Date: Wed, 25 Nov 2020 15:50:28 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BA=86zipfiles.go=E4=B8=AD?= =?UTF-8?q?ZipFiles=E5=87=BD=E6=95=B0=E5=8F=AF=E8=83=BD=E4=BC=9A=E9=80=A0?= =?UTF-8?q?=E6=88=90=E7=9A=84goroutine=E6=B3=84=E9=9C=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/utils/zipfiles.go | 63 ++++++++++++++++++++++------------------ 1 file changed, 34 insertions(+), 29 deletions(-) diff --git a/server/utils/zipfiles.go b/server/utils/zipfiles.go index 1242cbfb..665d6b0f 100644 --- a/server/utils/zipfiles.go +++ b/server/utils/zipfiles.go @@ -20,38 +20,43 @@ func ZipFiles(filename string, files []string, oldform, newform string) error { // 把files添加到zip中 for _, file := range files { - - zipfile, err := os.Open(file) - if err != nil { - return err - } - defer zipfile.Close() - - // 获取file的基础信息 - info, err := zipfile.Stat() - if err != nil { - return err - } - - header, err := zip.FileInfoHeader(info) + err = func(file string) error { + zipFile, err := os.Open(file) + if err != nil { + return err + } + defer zipFile.Close() + + // 获取file的基础信息 + info, err := zipFile.Stat() + if err != nil { + return err + } + + header, err := zip.FileInfoHeader(info) + if err != nil { + return err + } + + // 使用上面的FileInforHeader() 就可以把文件保存的路径替换成我们自己想要的了,如下面 + header.Name = strings.Replace(file, oldform, newform, -1) + + // 优化压缩 + // 更多参考see http://golang.org/pkg/archive/zip/#pkg-constants + header.Method = zip.Deflate + + writer, err := zipWriter.CreateHeader(header) + if err != nil { + return err + } + if _, err = io.Copy(writer, zipFile); err != nil { + return err + } + return nil + }(file) if err != nil { return err } - - // 使用上面的FileInforHeader() 就可以把文件保存的路径替换成我们自己想要的了,如下面 - header.Name = strings.Replace(file, oldform, newform, -1) - - // 优化压缩 - // 更多参考see http://golang.org/pkg/archive/zip/#pkg-constants - header.Method = zip.Deflate - - writer, err := zipWriter.CreateHeader(header) - if err != nil { - return err - } - if _, err = io.Copy(writer, zipfile); err != nil { - return err - } } return nil }