aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Lu <chris.lu@gmail.com>2020-03-01 23:37:02 -0800
committerChris Lu <chris.lu@gmail.com>2020-03-01 23:37:02 -0800
commit7335e6219921fd3976179f6a74ea4a2dcdc43e1e (patch)
tree5ce4ce92d3a21ce84b7b9595c849d36287ff2677
parent410bce3925fb47d6ba21f838fafed4ff7c892a90 (diff)
downloadseaweedfs-7335e6219921fd3976179f6a74ea4a2dcdc43e1e.tar.xz
seaweedfs-7335e6219921fd3976179f6a74ea4a2dcdc43e1e.zip
volume: PUT also conditionally gzip compress
-rw-r--r--weed/storage/needle/needle.go13
1 files changed, 12 insertions, 1 deletions
diff --git a/weed/storage/needle/needle.go b/weed/storage/needle/needle.go
index 494cc138e..022e8bf14 100644
--- a/weed/storage/needle/needle.go
+++ b/weed/storage/needle/needle.go
@@ -12,6 +12,7 @@ import (
"github.com/chrislusf/seaweedfs/weed/images"
. "github.com/chrislusf/seaweedfs/weed/storage/types"
+ "github.com/chrislusf/seaweedfs/weed/util"
)
const (
@@ -63,7 +64,7 @@ func ParseUpload(r *http.Request, sizeLimit int64) (
if r.Method == "POST" {
fileName, data, mimeType, isGzipped, originalDataSize, isChunkedFile, e = parseMultipart(r, sizeLimit)
} else {
- isGzipped = false
+ isGzipped = r.Header.Get("Content-Encoding") == "gzip"
mimeType = r.Header.Get("Content-Type")
fileName = ""
data, e = ioutil.ReadAll(io.LimitReader(r.Body, sizeLimit+1))
@@ -72,6 +73,16 @@ func ParseUpload(r *http.Request, sizeLimit int64) (
io.Copy(ioutil.Discard, r.Body)
}
r.Body.Close()
+ if isGzipped {
+ if unzipped, e := util.UnGzipData(data); e == nil {
+ originalDataSize = len(unzipped)
+ }
+ } else if shouldGzip, _ := util.IsGzippableFileType("", mimeType); shouldGzip {
+ if compressedData, err := util.GzipData(data); err == nil {
+ data = compressedData
+ isGzipped = true
+ }
+ }
}
if e != nil {
return