Replies: 1 comment 2 replies
-
I tried to see the sources. As far as I understand, there is a condition when uploading files from filer to volume server: if shouldGzipNow && !option.Cipher {
compressed, compressErr := util.GzipData(data)
// fmt.Printf("data is compressed from %d ==> %d\n", len(data), len(compressed))
if compressErr == nil {
data = compressed
contentIsGzipped = true
}
} else if option.IsInputCompressed {
// just to get the clear data length
clearData, err = util.DecompressData(data)
if err == nil {
clearDataLen = len(clearData)
}
}
if option.Cipher {
// encrypt(gzip(data))
// encrypt
cipherKey := util.GenCipherKey()
encryptedData, encryptionErr := util.Encrypt(clearData, cipherKey) sed -n '177,278p' ./weed/operation/upload_content.go func doUploadDatafunc doUploadData(data []byte, option *UploadOption) (uploadResult *UploadResult, err error) {
contentIsGzipped := option.IsInputCompressed
shouldGzipNow := false
if !option.IsInputCompressed {
if option.MimeType == "" {
option.MimeType = http.DetectContentType(data)
// println("detect1 mimetype to", MimeType)
if option.MimeType == "application/octet-stream" {
option.MimeType = ""
}
}
if shouldBeCompressed, iAmSure := util.IsCompressableFileType(filepath.Base(option.Filename), option.MimeType); iAmSure && shouldBeCompressed {
shouldGzipNow = true
} else if !iAmSure && option.MimeType == "" && len(data) > 16*1024 {
var compressed []byte
compressed, err = util.GzipData(data[0:128])
if err != nil {
return
}
shouldGzipNow = len(compressed)*10 < 128*9 // can not compress to less than 90%
}
}
var clearDataLen int
// gzip if possible
// this could be double copying
clearDataLen = len(data)
clearData := data
if shouldGzipNow && !option.Cipher {
compressed, compressErr := util.GzipData(data)
// fmt.Printf("data is compressed from %d ==> %d\n", len(data), len(compressed))
if compressErr == nil {
data = compressed
contentIsGzipped = true
}
} else if option.IsInputCompressed {
// just to get the clear data length
clearData, err = util.DecompressData(data)
if err == nil {
clearDataLen = len(clearData)
}
}
if option.Cipher {
// encrypt(gzip(data))
// encrypt
cipherKey := util.GenCipherKey()
encryptedData, encryptionErr := util.Encrypt(clearData, cipherKey)
if encryptionErr != nil {
err = fmt.Errorf("encrypt input: %v", encryptionErr)
return
}
// upload data
uploadResult, err = upload_content(func(w io.Writer) (err error) {
_, err = w.Write(encryptedData)
return
}, len(encryptedData), &UploadOption{
UploadUrl: option.UploadUrl,
Filename: "",
Cipher: false,
IsInputCompressed: false,
MimeType: "",
PairMap: nil,
Jwt: option.Jwt,
})
if uploadResult == nil {
return
}
uploadResult.Name = option.Filename
uploadResult.Mime = option.MimeType
uploadResult.CipherKey = cipherKey
uploadResult.Size = uint32(clearDataLen)
} else {
// upload data
uploadResult, err = upload_content(func(w io.Writer) (err error) {
_, err = w.Write(data)
return
}, len(data), &UploadOption{
UploadUrl: option.UploadUrl,
Filename: option.Filename,
Cipher: false,
IsInputCompressed: contentIsGzipped,
MimeType: option.MimeType,
PairMap: option.PairMap,
Jwt: option.Jwt,
Md5: option.Md5,
BytesBuffer: option.BytesBuffer,
})
if uploadResult == nil {
return
}
uploadResult.Size = uint32(clearDataLen)
if contentIsGzipped {
uploadResult.Gzip = 1
}
}
return uploadResult, err
}
|
Beta Was this translation helpful? Give feedback.
2 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
Launched Filer with encryption and sent text files there using:
weed filer.copy -include 2113/*.txt http://localhost:8888/resources/
files not compressed:
> fs.meta.cat /resources/2113/2113871.txt
I had a question, in what order are the files compressed, before encryption or after?
checked in my console, order matters:
Compressed files:
Encrypted uncompressed and compressed files:
Compressed encrypted files:
We check the result:
user@comp:~/seaweedfs_vol/filer/aes$ ls -lh итого 32M -rw-rw-r-- 1 user user 3,3M apr 23 16:12 did26188.txt -rw-rw-r-- 1 user user 3,3M apr 23 16:16 did26188.txt.enc -rw-rw-r-- 1 user user 3,3M apr 23 16:18 did26188.txt.enc.gz -rw-rw-r-- 1 user user 673K apr 23 16:14 did26188.txt.gz -rw-rw-r-- 1 user user 673K apr 23 16:18 did26188.txt.gz.enc -rw-rw-r-- 1 user user 5,6M apr 23 16:12 did7903.txt -rw-rw-r-- 1 user user 5,6M apr 23 16:17 did7903.txt.enc -rw-rw-r-- 1 user user 5,6M apr 23 16:19 did7903.txt.enc.gz -rw-rw-r-- 1 user user 1,7M apr 23 16:14 did7903.txt.gz -rw-rw-r-- 1 user user 1,7M apr 23 16:17 did7903.txt.gz.enc
The size of encrypted and then compressed files has not changed:
The size of compressed and then encrypted files has become smaller:
Beta Was this translation helpful? Give feedback.
All reactions