From 731f8224b0223a562b049b4e1f420febc24c84a5 Mon Sep 17 00:00:00 2001 From: lixxxww <941403820@qq.com> Date: Tue, 23 Jan 2024 11:31:44 +0000 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96kit/zip?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: lixxxww <941403820@qq.com> --- kit/file/file.go | 45 ++++++++++++++++++++++++++++++++ kit/file/zipfiles.go | 61 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 106 insertions(+) create mode 100644 kit/file/file.go create mode 100644 kit/file/zipfiles.go diff --git a/kit/file/file.go b/kit/file/file.go new file mode 100644 index 0000000..1273130 --- /dev/null +++ b/kit/file/file.go @@ -0,0 +1,45 @@ +package utilFile + +import ( + "io" + "mime/multipart" + "net/http" + "os" +) + +// DownloadFile 会将url下载到本地文件,它会在下载时写入,而不是将整个文件加载到内存中。 +func DownloadFile(url, filepath string) error { + // Get the data + resp, err := http.Get(url) + if err != nil { + return err + } + defer resp.Body.Close() + + // Create the file + out, err := os.Create(filepath) + if err != nil { + return err + } + defer out.Close() + // Write the body to file + _, err = io.Copy(out, resp.Body) + return err +} + +func SaveUploadedFile(file *multipart.FileHeader, dst string) error { + src, err := file.Open() + if err != nil { + return err + } + defer src.Close() + + out, err := os.Create(dst) + if err != nil { + return err + } + defer out.Close() + + _, err = io.Copy(out, src) + return err +} diff --git a/kit/file/zipfiles.go b/kit/file/zipfiles.go new file mode 100644 index 0000000..818b15a --- /dev/null +++ b/kit/file/zipfiles.go @@ -0,0 +1,61 @@ +package utilFile + +import ( + "archive/zip" + "io" + "os" + "strings" +) + +func ZipFiles(filename string, files []string, oldForm, newForm string) error { + newZipFile, err := os.Create(filename) + if err != nil { + return err + } + defer newZipFile.Close() + + zipWriter := zip.NewWriter(newZipFile) + defer zipWriter.Close() + + for _, file := range files { + err = compressFile(file, oldForm, newForm, zipWriter) + if err != nil { + return err + } + } + + return nil +} + +func compressFile(file, oldForm, newForm string, zipWriter *zip.Writer) error { + zipFile, err := os.Open(file) + if err != nil { + return err + } + defer zipFile.Close() + + info, err := zipFile.Stat() + if err != nil { + return err + } + + header, err := zip.FileInfoHeader(info) + if err != nil { + return err + } + + header.Name = strings.Replace(file, oldForm, newForm, -1) + header.Method = zip.Deflate + + writer, err := zipWriter.CreateHeader(header) + if err != nil { + return err + } + + _, err = io.Copy(writer, zipFile) + if err != nil { + return err + } + + return nil +} \ No newline at end of file