123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- package utils
-
- import (
- "archive/zip"
- "compress/flate"
- "io"
- "io/ioutil"
- "net/http"
- )
-
- // NetFile 远程文件
- type NetFile struct {
- Name string
- URI string
- }
-
- // ZipNetFiles 压缩远程文件
- func ZipNetFiles(files []NetFile, w io.Writer) error {
- if files == nil || len(files) == 0 {
- return nil
- }
-
- z := zip.NewWriter(w)
- defer z.Close()
-
- z.RegisterCompressor(zip.Deflate, func(out io.Writer) (io.WriteCloser, error) {
- return flate.NewWriter(out, flate.BestCompression)
- })
-
- for _, f := range files {
- resp, err := http.Get(f.URI)
- if err != nil {
- LogError("获取远程文件失败: ", err)
- return err
- }
-
- dt, err := ioutil.ReadAll(resp.Body)
- defer resp.Body.Close()
- if err != nil {
- LogError("读取远程文件内容失败: ", err)
- return err
- }
-
- fd, err := z.Create(f.Name)
- if err != nil {
- LogError("压缩远程文件失败: ", err)
- return err
- }
-
- fd.Write(dt)
- }
-
- return nil
- }
|