Browse Source

do not check crc64 while the value of accept encoding is gzip

hangzws 7 years ago
parent
commit
f4e9576281
2 changed files with 26 additions and 2 deletions
  1. 13 2
      oss/bucket.go
  2. 13 0
      oss/bucket_test.go

+ 13 - 2
oss/bucket.go

@@ -165,7 +165,12 @@ func (bucket Bucket) GetObjectToFile(objectKey, filePath string, options ...Opti
 
 	// Compares the CRC value
 	hasRange, _, _ := isOptionSet(options, HTTPHeaderRange)
-	if bucket.getConfig().IsEnableCRC && !hasRange {
+	encodeOpt, _ := findOption(options, HTTPHeaderAcceptEncoding, nil)
+	acceptEncoding := ""
+	if encodeOpt != nil {
+		acceptEncoding = encodeOpt.(string)
+	}
+	if bucket.getConfig().IsEnableCRC && !hasRange && acceptEncoding != "gzip" {
 		result.Response.ClientCRC = result.ClientCRC.Sum64()
 		err = checkCRC(result.Response, "GetObjectToFile")
 		if err != nil {
@@ -839,7 +844,13 @@ func (bucket Bucket) GetObjectToFileWithURL(signedURL, filePath string, options
 
 	// Compare the CRC value. If CRC values do not match, return error.
 	hasRange, _, _ := isOptionSet(options, HTTPHeaderRange)
-	if bucket.getConfig().IsEnableCRC && !hasRange {
+	encodeOpt, _ := findOption(options, HTTPHeaderAcceptEncoding, nil)
+	acceptEncoding := ""
+	if encodeOpt != nil {
+		acceptEncoding = encodeOpt.(string)
+	}
+
+	if bucket.getConfig().IsEnableCRC && !hasRange && acceptEncoding != "gzip" {
 		result.Response.ClientCRC = result.ClientCRC.Sum64()
 		err = checkCRC(result.Response, "GetObjectToFileWithURL")
 		if err != nil {

+ 13 - 0
oss/bucket_test.go

@@ -353,6 +353,13 @@ func (s *OssBucketSuite) TestSignURL(c *C) {
 	c.Assert(err.(ServiceError).Code, Equals, "SignatureDoesNotMatch")
 	c.Assert(body, IsNil)
 
+	err = s.bucket.PutObjectFromFile(objectName, "../sample/The Go Programming Language.html")
+	c.Assert(err, IsNil)
+	str, err = s.bucket.SignURL(objectName, HTTPGet, 3600, AcceptEncoding("gzip"))
+	c.Assert(err, IsNil)
+	s.bucket.GetObjectToFileWithURL(str, newFile)
+	c.Assert(err, IsNil)
+
 	os.Remove(filePath)
 	os.Remove(newFile)
 
@@ -965,6 +972,12 @@ func (s *OssBucketSuite) TestGetObjectToFile(c *C) {
 	c.Assert(eq, Equals, true)
 	os.Remove(newFile)
 
+	// Accept-Encoding:gzip
+	err = s.bucket.PutObjectFromFile(objectName, "../sample/The Go Programming Language.html")
+	c.Assert(err, IsNil)
+	err = s.bucket.GetObjectToFile(objectName, newFile, AcceptEncoding("gzip"))
+	c.Assert(err, IsNil)
+
 	// If-None-Match
 	err = s.bucket.GetObjectToFile(objectName, newFile, IfNoneMatch(meta.Get("Etag")))
 	c.Assert(err, NotNil)