Pārlūkot izejas kodu

modify getsymlink return the whole head

dengwu12 8 gadi atpakaļ
vecāks
revīzija
e836780b02
3 mainītis faili ar 27 papildinājumiem un 14 dzēšanām
  1. 6 5
      oss/bucket.go
  2. 19 7
      oss/bucket_test.go
  3. 2 2
      oss/option.go

+ 6 - 5
oss/bucket.go

@@ -609,7 +609,7 @@ func (bucket Bucket) GetObjectACL(objectKey string) (GetObjectACLResult, error)
 // error 操作无错误为nil,非nil为错误信息。
 //
 func (bucket Bucket) PutSymlink(symObjectKey string, targetObjectKey string, options ...Option) error {
-	options = append(options, SymlinkTarget(url.QueryEscape(targetObjectKey)))
+	options = append(options, symlinkTarget(url.QueryEscape(targetObjectKey)))
 	resp, err := bucket.do("PUT", symObjectKey, "symlink", "symlink", options, nil, nil)
 	if err != nil {
 		return err
@@ -626,19 +626,20 @@ func (bucket Bucket) PutSymlink(symObjectKey string, targetObjectKey string, opt
 //
 // error 操作无错误为nil,非nil为错误信息。当error为nil时,返回的string为目标文件,否则该值无效。
 //
-func (bucket Bucket) GetSymlink(objectKey string) (string, error) {
+func (bucket Bucket) GetSymlink(objectKey string) (http.Header, error) {
 	resp, err := bucket.do("GET", objectKey, "symlink", "symlink", nil, nil, nil)
 	if err != nil {
-		return "", err
+		return nil, err
 	}
 	defer resp.Body.Close()
 
 	targetObjectKey := resp.Headers.Get(HTTPHeaderOSSSymlinkTarget)
 	targetObjectKey, err = url.QueryUnescape(targetObjectKey)
 	if err != nil {
-		return "", err
+		return resp.Headers, err
 	}
-	return targetObjectKey, err
+	resp.Headers.Set(HTTPHeaderOSSSymlinkTarget, targetObjectKey)
+	return resp.Headers, err
 }
 
 // Private

+ 19 - 7
oss/bucket_test.go

@@ -1522,7 +1522,7 @@ func (s *OssBucketSuite) TestSymlink(c *C) {
 	err = s.bucket.DeleteObject(targetObjectName)
 	c.Assert(err, IsNil)
 
-	target, err := s.bucket.GetSymlink(objectName)
+	meta, err := s.bucket.GetSymlink(objectName)
 	c.Assert(err, NotNil)
 
 	// Put
@@ -1535,9 +1535,9 @@ func (s *OssBucketSuite) TestSymlink(c *C) {
 	err = s.bucket.PutSymlink(objectName, targetObjectName)
 	c.Assert(err, IsNil)
 
-	target, err = s.bucket.GetSymlink(objectName)
+	meta, err = s.bucket.GetSymlink(objectName)
 	c.Assert(err, IsNil)
-	c.Assert(target, Equals, targetObjectName)
+	c.Assert(meta.Get(HTTPHeaderOSSSymlinkTarget), Equals, targetObjectName)
 
 	body, err := s.bucket.GetObject(objectName)
 	c.Assert(err, IsNil)
@@ -1545,7 +1545,7 @@ func (s *OssBucketSuite) TestSymlink(c *C) {
 	c.Assert(err, IsNil)
 	c.Assert(str, Equals, "target")
 
-	target, err = s.bucket.GetSymlink(targetObjectName)
+	meta, err = s.bucket.GetSymlink(targetObjectName)
 	c.Assert(err, NotNil)
 
 	err = s.bucket.PutObject(objectName, strings.NewReader("src"))
@@ -1557,19 +1557,31 @@ func (s *OssBucketSuite) TestSymlink(c *C) {
 	c.Assert(err, IsNil)
 	c.Assert(str, Equals, "src")
 
+	err = s.bucket.DeleteObject(objectName)
+	c.Assert(err, IsNil)
+
+	err = s.bucket.DeleteObject(targetObjectName)
+	c.Assert(err, IsNil)
+
 	// put symlink again
+	objectName = objectNamePrefix + "symlink"
+	targetObjectName = objectNamePrefix + "symlink-target"
+
 	err = s.bucket.PutSymlink(objectName, targetObjectName)
 	c.Assert(err, IsNil)
 
-	target, err = s.bucket.GetSymlink(objectName)
+	err = s.bucket.PutObject(targetObjectName, strings.NewReader("target1"))
 	c.Assert(err, IsNil)
-	c.Assert(target, Equals, targetObjectName)
+
+	meta, err = s.bucket.GetSymlink(objectName)
+	c.Assert(err, IsNil)
+	c.Assert(meta.Get(HTTPHeaderOSSSymlinkTarget), Equals, targetObjectName)
 
 	body, err = s.bucket.GetObject(objectName)
 	c.Assert(err, IsNil)
 	str, err = readBody(body)
 	c.Assert(err, IsNil)
-	c.Assert(str, Equals, "target")
+	c.Assert(str, Equals, "target1")
 
 	err = s.bucket.DeleteObject(objectName)
 	c.Assert(err, IsNil)

+ 2 - 2
oss/option.go

@@ -164,8 +164,8 @@ func ObjectACL(acl ACLType) Option {
 	return setHeader(HTTPHeaderOssObjectACL, string(acl))
 }
 
-// SymlinkTarget is an option to set X-Oss-Symlink-Target
-func SymlinkTarget(targetObjectKey string) Option {
+// symlinkTarget is an option to set X-Oss-Symlink-Target
+func symlinkTarget(targetObjectKey string) Option {
 	return setHeader(HTTPHeaderOSSSymlinkTarget, targetObjectKey)
 }