初始化分片上傳任務
功能說明
分片上傳操作可以將超過5GB的大文件分割后上傳,分片上傳對象首先需要發起分片上傳請求獲取一個upload id。
代碼示例
func CreateMultipartUpload(svc *s3.S3) {
createMultipartUploadInput := &s3.CreateMultipartUploadInput{
Bucket: aws.String("<your-bucket-name>"),
Key: aws.String("<your-object-key>"),
}
createMultipartUploadOutput, err := svc.CreateMultipartUpload(createMultipartUploadInput)
if err != nil {
fmt.Printf("fail to create multipart upload. %v", err)
} else {
fmt.Printf("upload id: %v\n", *createMultipartUploadOutput.UploadId)
}
}通過CreateMultipartUploadRequest操作獲取對象:
CreateMultipartUploadRequest操作首先生成一個"request.Request"對象,該對象是一個執行CreateMultipartUpload操作的請求。通過調用Request對象的Send方法完成初始化分片上傳的操作。該方法可以生成定制化的請求,例如自定義請求頭部請求超時重試設置。
func CreateMultipartUploadRequest(svc *s3.S3) {
createMultipartUploadInput := &s3.CreateMultipartUploadInput{
Bucket: aws.String("<your-bucket-name>"),
Key: aws.String("<your-object-key>"),
}
req, createMultipartUploadOutput := svc.CreateMultipartUploadRequest(createMultipartUploadInput)
err := req.Send()
if err != nil {
fmt.Printf("fail to create multipart upload. %v", err)
} else {
fmt.Printf("upload id: %v\n", *createMultipartUploadOutput.UploadId)
}
}請求參數
CreateMultipartUploadInput可設置的參數如下:
| 參數 | 類型 | 說明 | 是否必要 |
|---|---|---|---|
| ACL | *string | 配置上傳對象的預定義的標準ACL信息,例如private,public-read,public-read-write等 | 否 |
| Bucket | *string | bucket的名稱 | 是 |
| ContentType | *string | 描述上傳文件格式的標準MIME類型 | 否 |
| GrantFullControl | *string | 用于自定義用戶對此對象的FULL_CONTROL權限信息 | 否 |
| GrantRead | *string | 用于自定義用戶對此對象的READ權限信息 | 否 |
| GrantReadACP | *string | 用于自定義用戶對此對象的READ_ACP權限信息 | 否 |
| GrantWrite | *string | 用于自定義用戶對此對象的WRITE權限信息 | 否 |
| GrantWriteACP | *string | 用于自定義用戶對此對象的WRITE_ACP權限信息 | 否 |
| Key | *string | 上傳文件到對象存儲服務后對應的key | 是 |
| Metadata | map[string]*string | 對象的元數據信息 | 否 |
| Tagging | *string | 對象的標簽信息,必須是URL請求參數的形式。例如,"Key1=Value1" | 否 |
| WebsiteRedirectLocation | *string | 如果bucket被配置用于提供網站的靜態數據,該參數可以用于設置訪問對象時候重定向到當前bucket下的其他對象或者外部的URL | 否 |
返回結果
CreateMultipartUploadOutput返回的屬性如下:
| 參數 | 類型 | 說明 |
|---|---|---|
| Bucket | *string | 執行分片上傳的桶的名稱 |
| Key | *string | 本次分片上傳對象的名稱 |
| UploadId | *string | 本次生成分片上傳任務的id |
上傳分片
功能說明
初始化分片上傳任務后,指定分片上傳任務的id可以上傳分片數據,可以將大文件分割成分片后上傳,除了最后一個分片,每個分片的數據大小為5MB~5GB,每個分片上傳任務最多上傳10000個分片。
代碼示例
func UploadPart(svc *s3.S3) {
file, err := os.Open("<file-path>")
if err != nil {
fmt.Printf("Unable to open file:%v", err)
os.Exit(1)
}
defer func() {
err := file.Close()
if err != nil {
fmt.Printf("fail to close file. %v\n", err)
}
}()
?
uploadPartInput := &s3.UploadPartInput{
Body: file,
Bucket: aws.String("<your-bucket-name>"),
Key: aws.String("<your-object-key>"),
PartNumber: aws.Int64(1),
UploadId: aws.String("<your-upload-id>"),
}
uploadPartOutput, err := svc.UploadPart(uploadPartInput)
if err != nil {
fmt.Printf("fail to upload part. %v\n", err)
} else {
fmt.Println(uploadPartOutput)
}
}通過UploadPartRequest操作獲取對象:
UploadPartRequest操作首先生成一個"request.Request"對象,該對象是一個執行UploadPart操作的請求。通過調用Request對象的Send方法完成上傳分片的操作。該方法可以生成定制化的請求,例如自定義請求頭部請求超時重試設置。
func UploadPartRequest(svc *s3.S3) {
file, err := os.Open("<file-path>")
if err != nil {
fmt.Printf("Unable to open file:%v", err)
os.Exit(1)
}
defer func() {
err := file.Close()
if err != nil {
fmt.Printf("fail to close file. %v\n", err)
}
}()
?
uploadPartInput := &s3.UploadPartInput{
Body: file,
Bucket: aws.String("<your-bucket-name>"),
Key: aws.String("<your-object-key>"),
PartNumber: aws.Int64(1),
UploadId: aws.String("<your-upload-id>"),
}
req, uploadPartOutput := svc.UploadPartRequest(uploadPartInput)
err = req.Send()
if err != nil {
fmt.Printf("fail to upload part. %v\n", err)
} else {
fmt.Println(uploadPartOutput)
}
}請求參數
UploadPartInput可設置的參數如下:
| 參數 | 類型 | 說明 | 是否必要 |
|---|---|---|---|
| Body | io.ReadSeeker | 對象的數據 | 是 |
| Bucket | *string | 執行分片上傳的桶的名稱 | 是 |
| ContentLength | *int64 | 說明請求body的長度(單位:字節),該參數可以在body長度不能被自動識別的情況下設置 | 否 |
| ContentMD5 | *string | base64編碼的128位MD5值,不包含請求頭部的信息 | 否 |
| Key | *string | 上傳文件到對象存儲服務后對應的key | 是 |
| PartNumber | *int64 | 說明當前數據在文件中所屬的分片,大于等于1,小于等于10000 | 是 |
| UploadId | *string | 通過CreateMultipartUpload操作獲取的UploadId,與一個分片上傳的對象對應 | 是 |
返回結果
UploadPartOutput返回的屬性如下:
| 參數 | 類型 | 說明 |
|---|---|---|
| ETag | *string | 本次上傳分片對應的Entity Tag |
合并分片
功能說明
合并指定分片上傳任務id對應任務中已上傳的對象分片,使之成為一個完整的文件。
代碼示例
func CompleteMultipartUpload(svc *s3.S3) {
completeMultipartUploadInput := &s3.CompleteMultipartUploadInput{
Bucket: aws.String("<your-bucket-name>"),
Key: aws.String("<your-object-key>"),
MultipartUpload: &s3.CompletedMultipartUpload{
Parts: []*s3.CompletedPart{
{
ETag: aws.String("<etag1>"),
PartNumber: aws.Int64(1),
},
{
ETag: aws.String("<etag2>"),
PartNumber: aws.Int64(2),
},
},
},
UploadId: aws.String("<your-upload-id>"),
}
?
completeMultipartUploadOutput, err := svc.CompleteMultipartUpload(completeMultipartUploadInput)
if err != nil {
fmt.Printf("fail to complete multipart upload.%v\n", err)
} else {
fmt.Println(completeMultipartUploadOutput)
}
}通過CompleteMultipartUploadRequest操作獲取對象:
CompleteMultipartUploadRequest操作首先生成一個"request.Request"對象,該對象是一個執行CompleteMultipartUpload操作的請求。通過調用Request對象的Send方法完成合并分片的操作。該方法可以生成定制化的請求,例如自定義請求頭部請求超時重試設置。
func CompleteMultipartUploadRequest(svc *s3.S3) {
completeMultipartUploadInput := &s3.CompleteMultipartUploadInput{
Bucket: aws.String("<your-bucket-name>"),
Key: aws.String("<your-object-key>"),
MultipartUpload: &s3.CompletedMultipartUpload{
Parts: []*s3.CompletedPart{
{
ETag: aws.String("<etag1>"),
PartNumber: aws.Int64(1),
},
{
ETag: aws.String("<etag2>"),
PartNumber: aws.Int64(2),
},
},
},
UploadId: aws.String("<your-upload-id>"),
}
?
req, completeMultipartUploadOutput := svc.CompleteMultipartUploadRequest(completeMultipartUploadInput)
err := req.Send()
if err != nil {
fmt.Printf("fail to complete multipart upload. %v\n", err)
} else {
fmt.Println(completeMultipartUploadOutput)
}
}請求參數
CompleteMultipartUploadInput可設置的參數如下:
| 參數 | 類型 | 說明 | 是否必要 |
|---|---|---|---|
| Bucket | *string | 執行分片上傳的桶的名稱 | 是 |
| Key | *string | 上傳文件到對象存儲服務后對應的key | 是 |
| MultipartUpload | *CompletedMultipartUpload | 包含了每個已上傳的分片的ETag和PartNUmber等信息 | 否 |
| UploadId | *string | 通過CreateMultipartUpload操作獲取的UploadId,與一個對象的分片上傳對應 | 是 |
返回結果
CompleteMultipartUploadOutput返回的屬性如下:
| 參數 | 類型 | 說明 |
|---|---|---|
| Bucket | *string | 執行分片上傳的桶的名稱 |
| ETag | *string | 本次上傳對象后對應的Entity Tag |
| Key | *string | 上傳文件到對象存儲服務后對應的key |
| Location | *string | 合并生成對象的URI信息 |
| VersionId | *string | 上傳對象后相應的版本ID |
列舉分片上傳任務
功能說明
列舉分片上傳操作可以列出一個桶中正在進行的分片上傳,這些分片上傳的請求已經發起,但是還沒完成或者被中止。ListMultipartUploads操作可以通過指定MaxUploads參數來設置返回分片上傳信息的數量,MaxUploads參數的最大值和默認值均為1000。如果返回結果中的IsTruncated字分片為true,表示還有符合條件的分片上傳信息沒有列出,可以通過設置請求中的KeyMarker和UploadIdMarker參數,來列出符合篩選條件的正在上傳的分片信息。
代碼示例
func ListMultipartUploads(svc *s3.S3) {
listMultipartUploadsInput := &s3.ListMultipartUploadsInput{
Bucket: aws.String("<your-bucket-name>"),
}
listMultipartUploadsOutput, err := svc.ListMultipartUploads(listMultipartUploadsInput)
if err != nil {
fmt.Printf("fail to list multipart uploads. %v\n", err)
return
}
fmt.Println(listMultipartUploadsOutput)
}通過ListMultipartUploadsRequest操作:
ListMultipartUploadsRequest操作首先生成一個"request.Request"對象,該對象是一個執行ListMultipartUploads操作的請求。通過調用Request對象的Send方法來列出進行的分片上傳信息。該方法可以生成定制化的請求,例如自定義請求頭部請求超時重試設置。
func ListMultipartUploadsRequest(svc *s3.S3) {
listMultipartUploadsInput := &s3.ListMultipartUploadsInput{
Bucket: aws.String("<your-bucket-name>"),
}
req, listMultipartUploadsOutput := svc.ListMultipartUploadsRequest(listMultipartUploadsInput)
?
err := req.Send()
if err != nil {
fmt.Printf("fail to list multipart uploads. %v\n", err)
} else {
fmt.Println(listMultipartUploadsOutput)
}
}請求參數
ListMultipartUploadsInput可設置的參數如下:
| 參數 | 類型 | 說明 | 是否必要 |
|---|---|---|---|
| Bucket | *string | 執行本操作的桶名稱 | 是 |
| Delimiter | *string | 與Prefix參數一起用于對對象key進行分組的字符。所有key包含指定的Prefix且第一次出現Delimiter字符之間的對象作為一組。如果沒有指定Prefix參數,按Delimiter對所有對象key進行分割,多個對象分割后從對象key開始到第一個Delimiter之間相同的部分形成一組 | 否 |
| KeyMarker | *string | 和UploadIdMarker參數一起用于指定返回哪部分分片上傳的信息。如果沒有設置UploadIdMarker參數,則只返回對象key按照字典順序排序后位于KeyMarker標識符之后的分片信息。如果設置了UploadIdMarker參數,則會返回對象key等于KeyMarker且UploadId大于UploadIdMarker的分片信息 | 否 |
| MaxUploads | *int64 | 用于指定相應消息體中正在進行的分片上傳信息的最大數量,最小值為1,默認值和最大值都是1000 | 否 |
| Prefix | *string | 與Delimiter參數一起用于對對象key進行分組的字符。所有key包含指定的Prefix且第一次出現Delimiter字符之間的對象作為一組 | 否 |
| UploadIdMarker | *string | 和KeyMarker參數一起用于指定返回哪部分分片上傳的信息,僅當設置了KeyMarker參數的時候有效。設置后返回對象key等于KeyMarker且UploadId大于UploadIdMarker的分片信息 | 否 |
返回結果
ListMultipartUploadsOutput返回的屬性如下:
| 參數 | 類型 | 說明 |
|---|---|---|
| Bucket | *string | 執行本操作的桶名稱 |
| CommonPrefixes | []*CommonPrefix | 當請求中設置了Delimiter和Prefix屬性時,所有包含指定的Prefix且第一次出現Delimiter字符的對象key作為一組 |
| Delimiter | *string | 與請求中設置的Delimiter一致 |
| IsTruncated | *bool | 當為false時表示返回結果中包含了全部符合本次請求查詢條件的上傳分片信息,否則只返回了數量為MaxUploads個的分片信息 |
| KeyMarker | *string | 返回上傳分片列表中的起始對象的key |
| MaxUploads | *int64 | 本次返回結果中包含的上傳分片數量的最大值 |
| NextKeyMarker | *string | 當IsTruncated為true時,NextKeyMarker可以作為后續查詢已初始化的上傳分片請求中的KeyMarker的值 |
| NextUploadIdMarker | *string | 當IsTruncated為true時,NextKeyMarker可以作為后續查詢已初始化的上傳分片請求中的UploadIdMarker的值 |
| Prefix | *string | 限定返回分片中對應對象的key必須以Prefix作為前綴 |
| UploadIdMarker | *string | 返回上傳分片列表中的起始UploadId |
| Uploads | []*MultipartUpload | 包含了零個或多個已初始化的上傳分片信息的數組。數組中的每一項包含了分片初始化時間、分片上傳操作發起者、對象key、對象擁有者、存儲類型和UploadId等信息 |
列舉已上傳的分片
功能說明
列舉已上傳分片操作可以列出一個分片上傳操作中已經上傳完畢但是還未合并的分片信息。請求中需要提供object key和upload id,返回的結果最多包含1000個已上傳的分片信息,默認返回1000個,可以通過設置MaxParts參數的值指定返回結果中分片信息的數量。如果已上傳的分片信息的數量多于1000個,則返回結果中的IsTruncated字分片為true,可用通過設置PartNumberMarker參數獲取PartNumber大于該參數的分片信息。
代碼示例
func ListParts(svc *s3.S3) {
listPartsInput := &s3.ListPartsInput{
Bucket: aws.String("<your-bucket-name>"),
Key: aws.String("<your-object-key>"),
UploadId: aws.String("<your-upload-id>"),
}
listPartsOutput, err := svc.ListParts(listPartsInput)
if err != nil {
fmt.Printf("fail to list parts. %v\n", err)
return
}
fmt.Println(listPartsOutput)
}通過ListPartsRequest操作:
ListPartsRequest操作首先生成一個"request.Request"對象,該對象是一個執行ListParts操作的請求。通過調用Request對象的Send方法來列出一個分片上傳操作中已經上傳完畢的分片信息。該方法可以生成定制化的請求,例如自定義請求頭部請求超時重試設置。
func ListPartsRequest(svc *s3.S3) {
listPartsInput := &s3.ListPartsInput{
Bucket: aws.String("<your-bucket-name>"),
Key: aws.String("<your-object-key>"),
UploadId: aws.String("<your-upload-id>"),
}
req, listPartsOutput := svc.ListPartsRequest(listPartsInput)
?
err := req.Send()
if err != nil {
fmt.Printf("fail to list parts. %v\n", err)
} else {
fmt.Println(listPartsOutput)
}
}請求參數
ListPartsInput可設置的參數如下:
| 參數 | 類型 | 說明 | 是否必要 |
|---|---|---|---|
| Bucket | *string | 執行本操作的桶名稱 | 是 |
| Key | *string | 分片上傳的對象的key | 是 |
| MaxParts | *int64 | 指定返回分片信息的數量,默認值和最大值均為1000 | 否 |
| PartNumberMarker | *int64 | 用于指定返回part number大于PartNumberMarker的分片信息 | 否 |
| UploadId | *string | 指定返回該id所屬的分片上傳的分片信息 | 是 |
返回結果
ListPartsOutput返回的屬性如下:
| 參數 | 類型 | 說明 |
|---|---|---|
| Bucket | *string | 執行本操作的桶名稱 |
| IsTruncated | *bool | 當為false時表示返回結果中包含了全部符合本次請求查詢條件的上傳分片信息,否則只返回了數量為MaxParts個的分片信息 |
| Key | *string | 本次分片上傳對象的名稱 |
| MaxParts | *int64 | 本次返回結果中包含的上傳分片數量的最大值 |
| NextPartNumberMarker | *int64 | 當IsTruncated為true時,NextPartNumberMarker可以作為后續查詢已上傳分片請求中的PartNumberMarker的值 |
| Owner | *Owner | 分片上傳對象的擁有者信息,包含了用戶名和Id等信息 |
| PartNumberMarker | *int64 | 如果本次請求未能列出全部分片信息,該返回結果用于指定下次列舉分片請求的起始位置 |
| Parts | []*Part | 包含了已上傳分片信息的數組,數組中的每一項包含了該分片的Entity tag、最后修改時間、PartNumber和大小等信息 |
| StorageClass | *string | 對象的存儲類型 |
| UploadId | *string | 本次分片上傳操作Id |
復制分片
功能說明
復制分片操作可以從一個已存在的對象中拷貝指定分片的數據,當拷貝的對象大小超過5GB,必須使用復制分片操作完成對象的復。除了最后一個分片外,每個拷貝分片的大小范圍是[5MB,5GB]。在一個在拷貝大對象之前,需要使用初始化分片上傳操作獲取一個upload id,在完成拷貝操作之后,需要使用CompleteMultipartUpload操作組裝已拷貝的分片成為一個對象。
代碼示例
var (
sourceBucket = "<source-bucket-name>" //拷貝對象的來源
key = "<your-object-key>" //拷貝對象的key
destinationBucket = "<your-bucket-name>" //目標桶名字
)
?
func UploadPartCopy(svc *s3.S3) {
var MB int64
MB = 1024 * 1024
// 獲取被拷貝對象大小
headObjectOutput, err := svc.HeadObject(&s3.HeadObjectInput{
Bucket: aws.String(sourceBucket),
Key: aws.String(key),
})
if err != nil {
fmt.Printf("fail to head object. %v\n", err)
return
}
objectSize := *headObjectOutput.ContentLength
// UploadPartCopy操作的對象必須大于5MB
if objectSize <= 5*MB {
fmt.Printf("The size of the object must be bigger than 5MB.")
return
}
// 發起一個分片上傳請求,獲取uploadId
createMultipartUploadOutput, err := svc.CreateMultipartUpload(&s3.CreateMultipartUploadInput{
Bucket: aws.String(destinationBucket),
Key: aws.String(key),
})
if err != nil {
fmt.Printf("fail to create multipart upload. %v\n", err)
return
}
uploadId := createMultipartUploadOutput.UploadId
// 記錄拷貝分片結果
var uploadPartCopyResults map[int64]string
uploadPartCopyResults = make(map[int64]string)
// 拷貝分片
var start, end, i int64
fmt.Printf("object size: %v\n", objectSize)
for i = 0; i*16*MB+i < objectSize; i++ {
//每個分片大小為16MB
start = i*16*MB + i
if start+16*MB < objectSize {
end = start + 16*MB
} else {
end = objectSize - 1
}
fmt.Printf("start: %v, end: %v.\n", start, end)
if eTag, err := copyAUploadPart(svc, start, end, i+1, uploadId); err == nil {
uploadPartCopyResults[i+1] = *eTag
}
}
// 構建分片復制的part信息
var partItems []*s3.CompletedPart
for i, eTag := range uploadPartCopyResults {
partItems = append(partItems, &s3.CompletedPart{
ETag: aws.String(eTag),
PartNumber: aws.Int64(i),
})
}
// 完成分片上傳
completeMultipartUploadOutput, err := svc.CompleteMultipartUpload(&s3.CompleteMultipartUploadInput{
Bucket: aws.String(destinationBucket),
Key: aws.String(key),
UploadId: uploadId,
MultipartUpload: &s3.CompletedMultipartUpload{Parts: partItems},
})
if err != nil {
fmt.Printf("Failed to CompleteMultipartUpload. %v", err)
fmt.Println(completeMultipartUploadOutput)
}
}
?
func copyAUploadPart(svc *s3.S3, start int64, end int64, partNumber int64, uploadId *string) (*string, error) {
copySourceRange := "bytes=" + strconv.FormatInt(start, 10) + "-" + strconv.FormatInt(end, 10)
uploadPartCopyInput := &s3.UploadPartCopyInput{
Bucket: aws.String(destinationBucket),
CopySource: aws.String(sourceBucket + "/" + key),
CopySourceRange: aws.String(copySourceRange),
Key: aws.String(key),
PartNumber: aws.Int64(partNumber),
UploadId: uploadId,
}
uploadPartCopyOutput, err := svc.UploadPartCopy(uploadPartCopyInput)
if err != nil {
fmt.Printf("fail to copy upload part. %v\n", err)
return nil, err
}
return uploadPartCopyOutput.CopyPartResult.ETag, nil
}通過UploadPartCopyRequest操作:
UploadPartCopyRequest操作首先生成一個"request.Request"對象,該對象是一個執行UploadPartCopyRequest操作的請求。通過調用Request對象的Send方法來完成分片拷貝大對象的操作。該方法可以生成定制化的請求,例如自定義請求頭部請求超時重試設置。
func UploadPartCopyRequest(svc *s3.S3) {
// 發起一個分片上傳請求,獲取uploadId
createMultipartUploadOutput, err := svc.CreateMultipartUpload(&s3.CreateMultipartUploadInput{
Bucket: aws.String("<your-bucket-name>"),
Key: aws.String("<your-object-key>"),
})
if err != nil {
fmt.Printf("fail to create multipart upload. %v\n", err)
return
}
uploadId := createMultipartUploadOutput.UploadId
// 分片復制
uploadPartCopyInput := &s3.UploadPartCopyInput{
Bucket: aws.String("<destination-bucket-name>"),
CopySource: aws.String("<source-bucket/object-Key>"),
Key: aws.String("<your-object-key>"),
PartNumber: aws.Int64(1),
UploadId: uploadId,
}
req, uploadPartCopyOutput := svc.UploadPartCopyRequest(uploadPartCopyInput)
?
err = req.Send()
if err != nil {
fmt.Printf("fail to copy upload part. %v\n", err)
} else {
fmt.Print(uploadPartCopyOutput)
}
}請求參數
UploadPartCopyInput可設置的參數如下:
| 參數 | 類型 | 說明 | 是否必要 |
|---|---|---|---|
| Bucket | *string | 存放拷貝生成對象的桶名稱 | 是 |
| CopySource | *string | URL格式的拷貝對象數據來源,包含了桶名稱和對象key的信息,二者之間使用正斜桿(/)分割,versionId可選參數用于指定原對象的版本。例如,"foo/boo?versionId=11111"表示拷貝foo桶中的boo對象,其版本id為11111。如果不指定versionId參數,則默認拷貝當前版本的對象數據 | 是 |
| CopySourceIfMatch | *string | 用于指定只有在被拷貝對象的ETag和該參數值匹配的情況下才進行拷貝操作 | 否 |
| CopySourceIfModifiedSince | *time.Time | 用于只有當被拷貝對象在指定時間后被修改的情況下才進行拷貝操作。 | 否 |
| CopySourceIfNoneMatch | *string | 用于指定只有在被拷貝對象的ETag和該參數值不匹配的情況下才進行拷貝操作 | 否 |
| CopySourceIfUnmodifiedSince | *time.Time | 用于僅當對象自指定時間以來未被修改的情況下才返回對象數據,否則返回412錯誤碼 | 否 |
| CopySourceRange | *string | 指定本次分片拷貝的數據范圍,必須是"bytes=first-last"的格式,例如"bytes=0-9"表示拷貝原對象中前10字節的數據,只有當拷貝的分片大小大于5MB的時候有效 | 否 |
| Key | *string | 拷貝生成對象的key | 是 |
| PartNumber | *int64 | 說明本次分片拷貝的數據在原對象中所屬的部分 | 是 |
| UploadId | *string | 與本次拷貝操作相應的分片上傳Id | 是 |
返回結果
UploadPartCopyOutput返回的屬性如下:
| 參數 | 類型 | 說明 |
|---|---|---|
| CopyPartResult | *CopyPartResult | 包含拷貝分片的Entity Tag和最后修改時間等信息 |
取消分片上傳任務
功能說明
取消分片上傳任務操作用于終止一個分片上傳。當一個分片上傳被中止后,不會再有數據通過與之相應的upload id上傳,同時已經被上傳的分片所占用的空間會被釋放。執行取消分片上傳任務操作后,正在上傳的分片可能會上傳成功也可能會被中止,所以必要的情況下需要執行多次取消分片上傳任務操作去釋放全部上傳成功的分片所占用的空間。可以通過執行列舉已上傳分片操作來確認所有中止分片上傳后所有已上傳分片的空間是否被被釋放。
代碼示例
func AbortMultipartUpload(svc *s3.S3, bucket, key, uploadId string) {
abortMultipartUploadInput := &s3.AbortMultipartUploadInput{
Bucket: aws.String("<your-bucket-name>"),
Key: aws.String("<your-object-key>"),
UploadId: aws.String("<your-upload-id>"),
}
?
abortMultipartUploadOutput, err := svc.AbortMultipartUpload(abortMultipartUploadInput)
if err != nil {
fmt.Printf("fail to AbortMultipartUpload. %v\n", err)
return
}
fmt.Println(abortMultipartUploadOutput)
}通過AbortMultipartUploadRequest操作:
AbortMultipartUploadRequest操作首先生成一個"request.Request"對象,該對象是一個執行AbortMultipartUploadRequest操作的請求。通過調用Request對象的Send方法來中止一個分片上傳操作。該方法可以生成定制化的請求,例如自定義請求頭部請求超時重試設置。
func AbortMultipartUploadRequest(svc *s3.S3) {
abortMultipartUploadInput := &s3.AbortMultipartUploadInput{
Bucket: aws.String("<your-bucket-name>"),
Key: aws.String("<your-object-key>"),
UploadId: aws.String("<your-upload-id>"),
}
?
req, abortMultipartUploadOutput := svc.AbortMultipartUploadRequest(abortMultipartUploadInput)
err := req.Send()
if err != nil {
fmt.Printf("fail to AbortMultipartUpload. %v\n", err)
} else {
fmt.Println(abortMultipartUploadOutput)
}
}請求參數
AbortMultipartUploadInput可設置的參數如下:
| 參數 | 類型 | 說明 | 是否必要 |
|---|---|---|---|
| Bucket | *string | 執行本操作的桶名稱 | 是 |
| Key | *string | 分片上傳的對象的key | 是 |
| UploadId | *string | 指定需要終止的分片上傳的id | 是 |