aboutsummaryrefslogtreecommitdiff
path: root/weed/util/compression.go
diff options
context:
space:
mode:
Diffstat (limited to 'weed/util/compression.go')
-rw-r--r--weed/util/compression.go27
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) {