OSDN Git Service

Osssync (#580)
[bytom/vapor.git] / toolbar / osssync / util / gzip.go
1 package util
2
3 import (
4         "compress/gzip"
5         "os"
6 )
7
8 const READ_SIZE = 1024 * 1024 * 500
9
10 // GzipCompress compress file to Gzip
11 func (f *FileUtil) GzipCompress(fileName string) error {
12         filePath := f.LocalDir + fileName + ".json.gz"
13         fw, err := os.Create(filePath)
14         if err != nil {
15                 return err
16         }
17
18         defer fw.Close()
19
20         gw := gzip.NewWriter(fw)
21         defer gw.Close()
22
23         filePath = f.LocalDir + fileName + ".json"
24         fr, err := os.Open(filePath)
25         if err != nil {
26                 return err
27         }
28
29         defer fr.Close()
30
31         fi, err := fr.Stat()
32         if err != nil {
33                 return err
34         }
35
36         gw.Header.Name = fi.Name()
37
38         buf := make([]byte, fi.Size())
39         _, err = fr.Read(buf)
40         if err != nil {
41                 return err
42         }
43
44         _, err = gw.Write(buf)
45         if err != nil {
46                 return err
47         }
48
49         return err
50 }
51
52 // GzipUncompress uncompress Gzip file
53 func (f *FileUtil) GzipUncompress(fileName string) error {
54         filedirname := f.LocalDir + fileName + ".json.gz"
55         fr, err := os.Open(filedirname)
56         if err != nil {
57                 return err
58         }
59
60         defer fr.Close()
61
62         gr, err := gzip.NewReader(fr)
63         if err != nil {
64                 return err
65         }
66
67         defer gr.Close()
68
69         buf := make([]byte, READ_SIZE)
70         n, err := gr.Read(buf)
71
72         filedirname = f.LocalDir + gr.Header.Name
73         fw, err := os.Create(filedirname)
74         if err != nil {
75                 return err
76         }
77
78         _, err = fw.Write(buf[:n])
79         if err != nil {
80                 return err
81         }
82
83         return err
84 }