123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. package utils
  2. import (
  3. "archive/zip"
  4. "compress/flate"
  5. "io"
  6. "io/ioutil"
  7. "net/http"
  8. )
  9. // NetFile 远程文件
  10. type NetFile struct {
  11. Name string
  12. URI string
  13. }
  14. // ZipNetFiles 压缩远程文件
  15. func ZipNetFiles(files []NetFile, w io.Writer) error {
  16. if files == nil || len(files) == 0 {
  17. return nil
  18. }
  19. z := zip.NewWriter(w)
  20. defer z.Close()
  21. z.RegisterCompressor(zip.Deflate, func(out io.Writer) (io.WriteCloser, error) {
  22. return flate.NewWriter(out, flate.BestCompression)
  23. })
  24. for _, f := range files {
  25. resp, err := http.Get(f.URI)
  26. if err != nil {
  27. LogError("获取远程文件失败: ", err)
  28. return err
  29. }
  30. dt, err := ioutil.ReadAll(resp.Body)
  31. defer resp.Body.Close()
  32. if err != nil {
  33. LogError("读取远程文件内容失败: ", err)
  34. return err
  35. }
  36. fd, err := z.Create(f.Name)
  37. if err != nil {
  38. LogError("压缩远程文件失败: ", err)
  39. return err
  40. }
  41. fd.Write(dt)
  42. }
  43. return nil
  44. }