This document provides an overview of APIs and SDK code samples for copying and moving an object.
Simple operations
API | Operation | Description |
---|---|---|
PUT Object - Copy | Copying an object (modifying object attributes) | Copies a file to a destination path. |
Multipart operations
API | Operation | Description |
---|---|---|
Initiate Multipart Upload | Initializing a multipart upload/copy operation | Initializes a multipart upload/copy operation. |
Upload Part - Copy | Copying a part | Copies an object as a part. |
Complete Multipart Upload | Completing a multipart upload/copy | Completes the multipart upload/copy of an object. |
This API (PUT Object - Copy
) is used to create a copy of an existing COS object, that is, to copy an object from the source path (object key) to the destination path (object key). During the process, object metadata and ACLs can be modified.
You can use this API to create a copy of an object, modify an object’s metadata (the source object and destination file have the same attributes), and move or rename an object (copy the object first and then call the deletion API).
func (s *ObjectService) Copy(ctx context.Context, key, sourceURL string, opt *ObjectCopyOptions) (*ObjectCopyResult, *Response, error)
package main
import (
"context"
"fmt"
"github.com/tencentyun/cos-go-sdk-v5"
"net/http"
"net/url"
"os"
"strings"
)
func main() {
// Bucket name in the format of `BucketName-APPID` (`APPID` is required), which can be viewed in the COS console at https://console.intl.cloud.tencent.com/cos5/bucket.
// Replace it with your `region`, which can be viewed in the COS console at https://console.intl.cloud.tencent.com/. For more information about regions, see https://intl.cloud.tencent.com/document/product/436/6224.
u, _ := url.Parse("https://examplebucket-1250000000.cos.ap-guangzhou.myqcloud.com")
b := &cos.BaseURL{BucketURL: u}
client := cos.NewClient(b, &http.Client{
Transport: &cos.AuthorizationTransport{
// Get the key from environment variables
// Environment variable `SECRETID` refers to the user's SecretId, which can be viewed in the CAM console at https://console.intl.cloud.tencent.com/cam/capi.
SecretID: os.Getenv("SECRETID"),
// Environment variable `SECRETKEY` refers to the user's `SecretKey`, which can be viewed in the CAM console at https://console.intl.cloud.tencent.com/cam/capi.
SecretKey: os.Getenv("SECRETKEY"),
},
})
name := "exampleobject"
// Upload the source object
f := strings.NewReader("test")
_, err := client.Object.Put(context.Background(), name, f, nil)
sourceURL := fmt.Sprintf("examplebucket-1250000000.cos.ap-guangzhou.myqcloud.com/%s", name)
dest := "example_dest"
// Considering the ACL limit, we recommend not setting an object ACL when uploading an object unless required. The object will then inherit the bucket ACL by default.
// opt := &cos.ObjectCopyOptions{}
_, _, err = client.Object.Copy(context.Background(), dest, sourceURL, nil)
if err != nil {
panic(err)
}
}
package main
import (
"context"
"fmt"
"github.com/tencentyun/cos-go-sdk-v5"
"net/http"
"net/url"
"os"
"strings"
)
func main() {
// Bucket name in the format of `BucketName-APPID` (`APPID` is required), which can be viewed in the COS console at https://console.intl.cloud.tencent.com/cos5/bucket.
// Replace it with your `region`, which can be viewed in the COS console at https://console.intl.cloud.tencent.com/. For more information about regions, see https://intl.cloud.tencent.com/document/product/436/6224.
u, _ := url.Parse("https://examplebucket-1250000000.cos.ap-guangzhou.myqcloud.com")
b := &cos.BaseURL{BucketURL: u}
client := cos.NewClient(b, &http.Client{
Transport: &cos.AuthorizationTransport{
// Get the key from environment variables
// Environment variable `SECRETID` refers to the user's `SecretId`, which can be viewed in the CAM console at https://console.intl.cloud.tencent.com/cam/capi.
SecretID: os.Getenv("SECRETID"),
// Environment variable `SECRETKEY` refers to the user's `SecretKey`, which can be viewed in the CAM console at https://console.intl.cloud.tencent.com/cam/capi.
SecretKey: os.Getenv("SECRETKEY"),
},
})
source := "test/oldfile"
f := strings.NewReader("test")
// Upload the file
_, err := client.Object.Put(context.Background(), source, f, nil)
if err != nil {
// Error
}
// Move the object
dest := "test/newfile"
sourceURL := fmt.Sprintf("examplebucket-1250000000.cos.ap-guangzhou.myqcloud.com/%s", source)
_, _, err = client.Object.Copy(context.Background(), dest, sourceURL, nil)
if err == nil {
_, err = client.Object.Delete(context.Background(), source, nil)
if err != nil {
// Error
}
}
}
Note:You can change STANDARD to STANDARD_IA, INTELLIGENT TIERING, ARCHIVE, or DEEP ARCHIVE. To modify ARCHIVE or DEEP ARCHIVE to other storage classes, you need to call
PostRestore
to restore objects in ARCHIVE or DEEP ARCHIVE first before calling this API. For more information, see Storage Class Overview.
package main
import (
"context"
"fmt"
"github.com/tencentyun/cos-go-sdk-v5"
"net/http"
"net/url"
"os"
"strings"
)
func main() {
// Bucket name in the format of `BucketName-APPID` (`APPID`. is required), which can be viewed in the COS console at https://console.intl.cloud.tencent.com/cos5/bucket.
// Replace it with your `region`, which can be viewed in the COS console at https://console.intl.cloud.tencent.com/. For more information about regions, see https://intl.cloud.tencent.com/document/product/436/6224.
u, _ := url.Parse("https://examplebucket-1250000000.cos.ap-guangzhou.myqcloud.com")
b := &cos.BaseURL{BucketURL: u}
client := cos.NewClient(b, &http.Client{
Transport: &cos.AuthorizationTransport{
// Get the key from environment variables
// Environment variable `SECRETID` refers to the user's `SecretId`, which can be viewed in the CAM console at https://console.intl.cloud.tencent.com/cam/capi.
SecretID: os.Getenv("SECRETID"),
// Environment variable `SECRETKEY` refers to the user's `SecretKey`, which can be viewed in the CAM console at https://console.intl.cloud.tencent.com/cam/capi.
SecretKey: os.Getenv("SECRETKEY"),
},
})
name := "exampleobject"
// Upload the source object
f := strings.NewReader("test")
_, err := client.Object.Put(context.Background(), name, f, nil)
sourceURL := fmt.Sprintf("%s/%s", client.BaseURL.BucketURL.Host, name)
opt := &cos.ObjectCopyOptions{
&cos.ObjectCopyHeaderOptions{
XCosMetadataDirective: "Replaced",
XCosStorageClass: "Archive", // Modify the storage class to ARCHIVE.
},
nil,
}
_, _, err = client.Object.Copy(context.Background(), name, sourceURL, opt)
if err != nil {
panic(err)
}
}
type ObjectCopyOptions struct {
*ObjectCopyHeaderOptions
*ACLHeaderOptions
}
type ACLHeaderOptions struct {
XCosACL string
XCosGrantRead string
XCosGrantWrite string
XCosGrantFullControl string
}
type ObjectCopyHeaderOptions struct {
XCosMetadataDirective string
XCosCopySourceIfModifiedSince string
XCosCopySourceIfUnmodifiedSince string
XCosCopySourceIfMatch string
XCosCopySourceIfNoneMatch string
XCosStorageClass string
// Custom x-cos-meta-* header
XCosMetaXXX *http.Header
XCosCopySource string
}
Parameter | Description | Type | Required |
---|---|---|---|
key | ObjectKey is the unique identifier of an object in a bucket. For example, in the object's access domain name bucket1-1250000000.cos.ap-guangzhou.myqcloud.com/doc1/pic1.jpg , the ObjectKey is doc1/pic1.jpg . |
String | Yes |
sourceURL | URL of the source file to copy | String | Yes |
XCosACL | Sets the file ACL, such as private , public-read , and public-read-write |
String | No |
XCosGrantFullControl | Grants full permission in the format: id="[OwnerUin]" |
String | No |
XCosGrantRead | Grants the read permission in the format: id="[OwnerUin]" | String | No |
XCosMetadataDirective | Valid values:Copy : copies the source object along with its metadata.Replaced : copies the source object while replacing its metadata.Replaced . |
String | Yes |
XCosCopySourceIfModifiedSince | If the object is modified after the specified time, the operation will be performed; otherwise, 412 will be returned. This parameter can be used together with XCosCopySourceIfNoneMatch . If it is used together with other conditions, a conflict will be returned. |
String | No |
XCosCopySourceIfUnmodifiedSince | If the object is not modified after the specified time, the operation will be performed; otherwise, 412 will be returned. This parameter can be used together with XCosCopySourceIfMatch . If it is used together with other conditions, a conflict will be returned. |
String | No |
XCosCopySourceIfMatch | If the ETag of the object is the same as the specified one, the operation will be performed; otherwise, 412 will be returned. This parameter can be used together with XCosCopySourceIfUnmodifiedSince . If it is used together with other conditions, a conflict will be returned. |
String | No |
XCosCopySourceIfNoneMatch | If the Etag of the object is different from the specified one, the operation will be performed; otherwise, 412 will be returned. This parameter can be used together with XCosCopySourceIfModifiedSince . If it is used together with other conditions, a conflict will be returned. |
String | No |
XCosStorageClass | Sets the object storage class. Valid values: STANDARD (default), STANDARD_IA, ARCHIVE. | String | No |
XCosMetaXXX | User-defined file metadata. | http.Header | No |
XCosCopySource | Source file URL. You can specify a historical version using the versionid sub-resource. |
String | No |
Attributes of the uploaded file:
type ObjectCopyResult struct {
ETag string
LastModified string
}
Parameter | Description | Type |
---|---|---|
ETag | MD5 of the copied file | String |
LastModified | Last modified time of the copied file | String |
Object movement involves copying the source object to the target location and deleting the source object.
Since COS uses the bucket name (Bucket
) and object key (ObjectKey
) to identify objects, moving an object will change the object identifier. Currently, the PHP SDK does not provide a standalone API to change object identifiers. However, you can still move the object with a combination of basic operations (object copy and object deletion).
For example, if you want to move the picture.jpg
object to the “doc” directory that is in the same bucket (mybucket-1250000000
), you can copy the picture.jpg
to the “doc” directory (making the object key doc/picture.jpg
) and then delete the source object.
Likewise, if you need to move picture.jpg
in the mybucket-1250000000
bucket to another bucket myanothorbucket-1250000000
, you can copy the object to the myanothorbucket-1250000000
bucket first and then delete the source object.
package main
import (
"context"
"fmt"
"github.com/tencentyun/cos-go-sdk-v5"
"net/http"
"net/url"
"os"
"strings"
)
func main() {
// Bucket name in the format of `BucketName-APPID` (`APPID` is required), which can be viewed in the COS console at https://console.intl.cloud.tencent.com/cos5/bucket.
// Replace it with your `region`, which can be viewed in the COS console at https://console.intl.cloud.tencent.com/. For more information about regions, see https://intl.cloud.tencent.com/document/product/436/6224.
u, _ := url.Parse("https://examplebucket-1250000000.cos.ap-guangzhou.myqcloud.com")
b := &cos.BaseURL{BucketURL: u}
client := cos.NewClient(b, &http.Client{
Transport: &cos.AuthorizationTransport{
// Get the key from environment variables
// Environment variable `SECRETID` refers to the user's `SecretId`, which can be viewed in the CAM console at https://console.intl.cloud.tencent.com/cam/capi.
SecretID: os.Getenv("SECRETID"),
// Environment variable `SECRETKEY` refers to the user's `SecretKey`, which can be viewed in the CAM console at https://console.intl.cloud.tencent.com/cam/capi.
SecretKey: os.Getenv("SECRETKEY"),
},
})
source := "test/oldfile"
f := strings.NewReader("test")
// Upload the file
_, err := client.Object.Put(context.Background(), source, f, nil)
if err != nil {
// Error
}
// Move the object
dest := "test/newfile"
sourceURL := fmt.Sprintf("%s/%s", u.Host, source)
_, _, err = client.Object.Copy(context.Background(), dest, sourceURL, nil)
if err == nil {
_, err = client.Object.Delete(context.Background(), source, nil)
if err != nil {
// Error
}
}
}
This API is used to initialize a multipart copy. After a successful operation, an upload ID
will be returned, which can be used in the subsequent Upload Part - Copy
requests.
func (s *ObjectService) InitiateMultipartUpload(ctx context.Context, name string, opt *InitiateMultipartUploadOptions) (*InitiateMultipartUploadResult, *Response, error)
package main
import (
"context"
"fmt"
"github.com/tencentyun/cos-go-sdk-v5"
"net/http"
"net/url"
"os"
)
func main() {
// Bucket name in the format of `BucketName-APPID` (`APPID` is required), which can be viewed in the COS console at https://console.intl.cloud.tencent.com/cos5/bucket.
// Replace it with your `region`, which can be viewed in the COS console at https://console.intl.cloud.tencent.com/. For more information about regions, see https://intl.cloud.tencent.com/document/product/436/6224.
u, _ := url.Parse("https://examplebucket-1250000000.cos.ap-guangzhou.myqcloud.com")
b := &cos.BaseURL{BucketURL: u}
client := cos.NewClient(b, &http.Client{
Transport: &cos.AuthorizationTransport{
// Get the key from environment variables
// Environment variable `SECRETID` refers to the user's `SecretId`, which can be viewed in the CAM console at https://console.intl.cloud.tencent.com/cam/capi.
SecretID: os.Getenv("SECRETID"),
// Environment variable `SECRETKEY` refers to the user's `SecretKey`, which can be viewed in the CAM console at https://console.intl.cloud.tencent.com/cam/capi.
SecretKey: os.Getenv("SECRETKEY"),
},
})
name := "exampleobject"
v, _, err := client.Object.InitiateMultipartUpload(context.Background(), name, nil)
if err != nil {
panic(err)
}
UploadID := v.UploadID
fmt.Println(UploadID)
}
type InitiateMultipartUploadOptions struct {
*ACLHeaderOptions
*ObjectPutHeaderOptions
}
type ACLHeaderOptions struct {
XCosACL string
XCosGrantRead string
XCosGrantWrite string
XCosGrantFullControl string
}
type ObjectPutHeaderOptions struct {
CacheControl string
ContentDisposition string
ContentEncoding string
ContentType string
ContentLength int64
Expires string
// Custom x-cos-meta-* header
XCosMetaXXX *http.Header
XCosStorageClass string
}
Parameter | Description | Type | Required |
---|---|---|---|
key | ObjectKey is the unique identifier of an object in a bucket. For example, in the object's access domain name examplebucket-1250000000.cos.ap-guangzhou.myqcloud.com/doc/pic.jpg , the ObjectKey is doc/pic.jpg . |
String | Yes |
XCosACL | Sets the file ACL, such as private or public-read |
String | No |
XCosGrantFullControl | Grants full permission in the format: id="[OwnerUin]" |
String | No |
XCosGrantRead | Grants read permission in the format: id="[OwnerUin]" | String | No |
XCosStorageClass | Sets the object storage class. Valid values: STANDARD (default), STANDARD_IA, ARCHIVE | String | No |
Expires | Sets Content-Expires |
String | No |
CacheControl | Cache policy. Sets Cache-Control |
String | No |
ContentType | Content Type. Sets Content-Type |
String | No |
ContentDisposition | Filename. Sets Content-Disposition |
String | No |
ContentEncoding | Encoding format. Sets Content-Encoding |
String | No |
ContentLength | Sets the length of the request content | Int64 | No |
XCosMetaXXX | User-defined file metadata. It must start with x-cos-meta. Otherwise, it will be ignored | http.Header | No |
type InitiateMultipartUploadResult struct {
Bucket string
Key string
UploadID string
}
Parameter | Description | Type |
---|---|---|
UploadId | ID that identifies the multipart upload | string |
Bucket | Bucket name in the format of BucketName-APPID |
string |
key | ObjectKey is the unique identifier of an object in a bucket. For example, in the object's access domain name examplebucket-1250000000.cos.ap-guangzhou.myqcloud.com/doc/pic.jpg , the ObjectKey is doc/pic.jpg . |
String |
This API (Upload Part - Copy
) is used to copy a part of an object from the source path to the destination path.
Note:To copy an object part, you must first initialize a multipart upload, after which a unique upload ID will be returned. This ID is required in the copy request.
func (s *ObjectService) CopyPart(ctx context.Context, key, uploadID string, partNumber int, sourceURL string, opt *ObjectCopyPartOptions) (*CopyPartResult, *Response, error)
package main
import (
"context"
"github.com/tencentyun/cos-go-sdk-v5"
"net/http"
"net/url"
"os"
)
func main() {
// Bucket name in the format of `BucketName-APPID` (`APPID` is required), which can be viewed in the COS console at https://console.intl.cloud.tencent.com/cos5/bucket.
// Replace it with your `region`, which can be viewed in the COS console at https://console.intl.cloud.tencent.com/. For more information about regions, see https://intl.cloud.tencent.com/document/product/436/6224.
u, _ := url.Parse("https://examplebucket-1250000000.cos.ap-guangzhou.myqcloud.com")
b := &cos.BaseURL{BucketURL: u}
client := cos.NewClient(b, &http.Client{
Transport: &cos.AuthorizationTransport{
// Get the key from environment variables
// Environment variable `SECRETID` refers to the user's `SecretId`, which can be viewed in the CAM console at https://console.intl.cloud.tencent.com/cam/capi.
SecretID: os.Getenv("SECRETID"),
// Environment variable `SECRETKEY` refers to the user's `SecretKey`, which can be viewed in the CAM console at https://console.intl.cloud.tencent.com/cam/capi.
SecretKey: os.Getenv("SECRETKEY"),
},
})
// Initialize multipart upload
name := "exampleobject"
v, _, err := client.Object.InitiateMultipartUpload(context.Background(), name, nil)
if err != nil {
// ERROR
}
uploadID := v.UploadID
// Copying an object part
sourceUrl := "examplebucket-1250000000.cos.ap-guangzhou.myqcloud.com/sourceobject"
res, _, err := client.Object.CopyPart(context.Background(), name, uploadID, 1, sourceUrl, nil)
if err != nil {
// ERROR
}
// Complete the multipart upload.
completeOpt := &cos.CompleteMultipartUploadOptions{}
completeOpt.Parts = append(completeOpt.Parts, cos.Object{
PartNumber: 1,
ETag: res.ETag,
})
_, _, err = client.Object.CompleteMultipartUpload(context.Background(), name, uploadID, completeOpt)
if err != nil {
// ERROR
}
}
type ObjectCopyPartOptions struct {
XCosCopySourceRange
XCosCopySourceIfModifiedSince
XCosCopySourceIfUnmodifiedSince
XCosCopySourceIfMatch
XCosCopySourceIfNoneMatch
}
Parameter | Description | Type | Required |
---|---|---|---|
Key | Objectkey (object name) is the unique identifier of an object in a bucket. For more information, see Object Overview. |
String | Yes |
uploadID | To copy an object part, you must first initialize a multipart upload, after which a unique upload ID will be returned. This ID is required in the copy request. |
String | Yes |
partNumber | Part number | Int | Yes |
sourceURL | Source object URL: <bucketname-appid>.cos.ap-guangzhou.myqcloud.com/<source> . You can specify a historical version using the ?versionId=<versionid> parameter. |
String | Yes |
opt | Part parameter | Struct | No |
XCosCopySourceRange | Byte range of the source object. The range value must be in the format of bytes=first-last , where both first and last are offsets starting from 0. For example, bytes=0-9 means to copy the first 10 bytes of the source object. If this parameter is not specified, the entire object will be copied. |
String | No |
XCosCopySourceIfModifiedSince | Required modification time. The object is copied only if it has been modified after the specified time. Otherwise, 412 will be returned. This parameter can be used together with x-cos-copy-source-If-None-Match . Using it together with other conditions may cause a conflict. |
String | No |
XCosCopySourceIfUnmodifiedSince | Required unmodified time. The object is copied only if it hasn’t been modified since the specified time. Otherwise, 412 will be returned. This parameter can be used together with x-cos-copy-source-If-Match . Using it together with other conditions may cause a conflict. |
String | No |
XCosCopySourceIfMatch | ETag that must be matched. The part will be copied only if its ETag matches the specified value. Otherwise, 412 will be returned. This parameter can be used together with x-cos-copy-source-If-Unmodified-Since . Using it together with other conditions may cause a conflict. |
String | No |
XCosCopySourceIfNoneMatch | ETag that cannot be matched. The part is copied only if its ETag does not match the specified value. Otherwise, 412 will be returned. This parameter can be used together with x-cos-copy-source-If-Modified-Since . Using it together with other conditions may cause a conflict. |
string | No |
type CopyPartResult struct {
ETag string
LastModified string
}
Parameter | Description | Type |
---|---|---|
ETag | MD5 checksum of the object, such as "22ca88419e2ed4721c23807c678adbe4c08a7880" . Note that double quotation marks are required at the beginning and the end. |
String |
LastModified | Last modified time of the object, in GMT format | String |
This API is used to complete a multipart copy. After all parts are copied via the Copy Parts
API, you need to call this API to complete the multipart copy. When using this API, you need to specify the PartNumber
and ETag
of each part in the request body for the part information to be verified.
The parts need to be reassembled after they are copied, which takes several minutes. When the assembly starts, COS will immediately return the status code 200
and will periodically return spaces during the process to keep the connection active until the assembly is completed. After that, COS will return the assembled result in the body.
400
(EntityTooSmall) will be returned when this API is called.uploadId
does not exist, 404
(NoSuchUpload) will be returned when this API is called.Note:We recommend you either complete or abort a multipart copy as early as possible, as the uploaded parts of an incomplete multipart copy will take up storage capacity and incur storage fees.
func (s *ObjectService) CompleteMultipartUpload(ctx context.Context, key, uploadID string, opt *CompleteMultipartUploadOptions) (*CompleteMultipartUploadResult, *Response, error)
package main
import (
"context"
"github.com/tencentyun/cos-go-sdk-v5"
"net/http"
"net/url"
"os"
)
func main() {
// Bucket name in the format of `BucketName-APPID` (`APPID` is required), which can be viewed in the COS console at https://console.intl.cloud.tencent.com/cos5/bucket.
// Replace it with your `region`, which can be viewed in the COS console at https://console.intl.cloud.tencent.com/. For more information about regions, see https://intl.cloud.tencent.com/document/product/436/6224.
u, _ := url.Parse("https://examplebucket-1250000000.cos.ap-guangzhou.myqcloud.com")
b := &cos.BaseURL{BucketURL: u}
client := cos.NewClient(b, &http.Client{
Transport: &cos.AuthorizationTransport{
// Get the key from environment variables
// Environment variable `SECRETID` refers to the user's `SecretId`, which can be viewed in the CAM console at https://console.intl.cloud.tencent.com/cam/capi.
SecretID: os.Getenv("SECRETID"),
// Environment variable `SECRETKEY` refers to the user's `SecretKey`, which can be viewed in the CAM console at https://console.intl.cloud.tencent.com/cam/capi.
SecretKey: os.Getenv("SECRETKEY"),
},
})
// Initialize multipart upload
name := "exampleobject"
v, _, err := client.Object.InitiateMultipartUpload(context.Background(), name, nil)
if err != nil {
// ERROR
}
uploadID := v.UploadID
// Copying an object part
sourceUrl := "examplebucket-1250000000.cos.ap-guangzhou.myqcloud.com/sourceobject"
res, _, err := client.Object.CopyPart(context.Background(), name, uploadID, 1, sourceUrl, nil)
if err != nil {
// ERROR
}
// Complete the multipart upload.
completeOpt := &cos.CompleteMultipartUploadOptions{}
completeOpt.Parts = append(completeOpt.Parts, cos.Object{
PartNumber: 1,
ETag: res.ETag,
})
_, _, err = client.Object.CompleteMultipartUpload(context.Background(), name, uploadID, completeOpt)
if err != nil {
// ERROR
}
}
type CompleteMultipartUploadOptions struct {
Parts []Object
}
type Object struct {
ETag string
PartNumber int
}
Parameter | Description | Type | Required |
---|---|---|---|
key | ObjectKey is the unique identifier of an object in a bucket. For example, in the object's access domain name examplebucket-1250000000.cos.ap-guangzhou.myqcloud.com/doc/pic.jpg , the ObjectKey is doc/pic.jpg |
String | Yes |
UploadId | ID that identifies the multipart upload; generated by InitiateMultipartUpload |
String | Yes |
CompleteMultipartUploadOptions | Information on all parts, including ETag and PartNumber |
Struct | Yes |
type CompleteMultipartUploadResult struct {
Location string
Bucket string
Key string
ETag string
}
Parameter | Description | Type |
---|---|---|
Location | URL address | String |
Bucket | Bucket name in the format of BucketName-APPID , for example, examplebucket-1250000000 |
String |
key | ObjectKey is the unique identifier of an object in a bucket. For example, in the object's access domain name examplebucket-1250000000.cos.ap-guangzhou.myqcloud.com/doc/pic.jpg , the ObjectKey is doc/pic.jpg |
String |
ETag | Unique tag of a merged object. This value does not represent the MD5 checksum of the object content, but is used only to verify the uniqueness of the object as a whole. To verify the object content, you can check the ETag of each part during the upload process |
String |
Was this page helpful?