diff options
| author | Chris Lu <chris.lu@gmail.com> | 2015-12-14 21:42:38 -0800 |
|---|---|---|
| committer | Chris Lu <chris.lu@gmail.com> | 2015-12-14 21:42:38 -0800 |
| commit | df5e54e02af60f6a1537cd5853def4dad42932bc (patch) | |
| tree | 1037c5cff81bfda50ca42a3249ebaeeb3774501e /go/operation/compress.go | |
| parent | 020dd480ed8dab0eeb3b6b25b2558084a51b26f2 (diff) | |
| parent | 031d26527f0ebe39bb26c8e8b4503168a849265a (diff) | |
| download | seaweedfs-df5e54e02af60f6a1537cd5853def4dad42932bc.tar.xz seaweedfs-df5e54e02af60f6a1537cd5853def4dad42932bc.zip | |
Merge pull request #224 from tnextday/feature/chunked-file-support
Feature/chunked file support
Diffstat (limited to 'go/operation/compress.go')
| -rw-r--r-- | go/operation/compress.go | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/go/operation/compress.go b/go/operation/compress.go new file mode 100644 index 000000000..b1105ba4b --- /dev/null +++ b/go/operation/compress.go @@ -0,0 +1,59 @@ +package operation + +import ( + "bytes" + "compress/flate" + "compress/gzip" + "io/ioutil" + "strings" + + "github.com/chrislusf/seaweedfs/go/glog" +) + +/* +* Default more not to gzip since gzip can be done on client side. + */ +func IsGzippable(ext, mtype string) bool { + if strings.HasPrefix(mtype, "text/") { + return true + } + switch ext { + case ".zip", ".rar", ".gz", ".bz2", ".xz": + return false + case ".pdf", ".txt", ".html", ".htm", ".css", ".js", ".json": + return true + } + if strings.HasPrefix(mtype, "application/") { + if strings.HasSuffix(mtype, "xml") { + return true + } + if strings.HasSuffix(mtype, "script") { + return true + } + } + return false +} + +func GzipData(input []byte) ([]byte, error) { + buf := new(bytes.Buffer) + w, _ := gzip.NewWriterLevel(buf, flate.BestCompression) + if _, err := w.Write(input); err != nil { + glog.V(2).Infoln("error compressing data:", err) + return nil, err + } + if err := w.Close(); err != nil { + glog.V(2).Infoln("error closing compressed data:", err) + return nil, err + } + return buf.Bytes(), nil +} +func UnGzipData(input []byte) ([]byte, error) { + buf := bytes.NewBuffer(input) + r, _ := gzip.NewReader(buf) + defer r.Close() + output, err := ioutil.ReadAll(r) + if err != nil { + glog.V(2).Infoln("error uncompressing data:", err) + } + return output, err +} |
