diff options
Diffstat (limited to 'weed/util/compression.go')
| -rw-r--r-- | weed/util/compression.go | 27 |
1 files changed, 26 insertions, 1 deletions
diff --git a/weed/util/compression.go b/weed/util/compression.go index 1f778b5d5..f6315ebc2 100644 --- a/weed/util/compression.go +++ b/weed/util/compression.go @@ -25,7 +25,25 @@ func GzipData(input []byte) ([]byte, error) { } return buf.Bytes(), nil } -func UnGzipData(input []byte) ([]byte, error) { +func UnCompressData(input []byte) ([]byte, error) { + if IsGzippedContent(input) { + return ungzipData(input) + } + +} + +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 +} + +func ungzipData(input []byte) ([]byte, error) { buf := bytes.NewBuffer(input) r, _ := gzip.NewReader(buf) defer r.Close() @@ -51,6 +69,13 @@ func IsGzippable(ext, mtype string, data []byte) bool { return isMostlyText } +func IsGzippedContent(data []byte) bool { + if len(data) < 2 { + return false + } + return data[0] == 31 && data[1] == 139 +} + /* * Default more not to gzip since gzip can be done on client side. */func IsGzippableFileType(ext, mtype string) (shouldBeZipped, iAmSure bool) { |
