融合接口
SDK提供封裝好的融合接口,方便用戶實現分片上傳的功能。
接口定義
public void Upload(string filePath, string bucketName, string key);
?
public void Upload(Stream stream, string bucketName, string key);
?
public void Upload(TransferUtilityUploadRequest request);
?
public Task UploadAsync(string filePath, string bucketName, string key, CancellationToken cancellationToken = default);
?
public Task UploadAsync(Stream stream, string bucketName, string key, CancellationToken cancellationToken = default);
?
public Task UploadAsync(TransferUtilityUploadRequest request, CancellationToken cancellationToken = default);代碼示例
class TransDemo
{
private readonly AmazonS3Client s3Client;
private readonly TransferUtility utility;
private string bucket = "<your-bucket-name>";
?
public TransDemo()
{
var credentials = new BasicAWSCredentials("<your-access-key>", "<your-secret-key>");
var conf = new AmazonS3Config
{
ServiceURL = "<your-endpoint>",
};
this.s3Client = new AmazonS3Client(credentials, conf);
this.utility = new TransferUtility(this.s3Client);
}
?
public void UploadFile()
{
Console.Out.WriteLine("UploadFile");
var key = "<your-object-key>";
var filePath = "<file-path>";
this.utility.Upload(filePath, bucket, key);
Console.Out.WriteLine("UploadFile success");
}
public void UploadFileRequest()
{
Console.Out.WriteLine("UploadFileRequest");
var key = "<your-object-key>";
var filePath = "<file-path>";
TransferUtilityUploadRequest req = new TransferUtilityUploadRequest();
req.BucketName = this.bucket;
req.Key = key;
//req.FilePath = filePath;
req.InputStream = new FileStream(filePath, FileMode.Open, FileAccess.Read);
req.PartSize = 5 * 1024 * 1024;
req.CannedACL = S3CannedACL.PublicRead;
?
this.utility.Upload(req);
Console.Out.WriteLine("UploadFileRequest success");
}
}請求參數
| 參數名 | 類型 | 說明 | 是否必要 |
|---|---|---|---|
| bucketName | string | 桶名 | 是 |
| key | string | 要上傳的對象名稱 | 是 |
| filePath | string | 上傳的文件路徑(和stream二選一) | 否 |
| stream | Stream | 上傳的文件流(和filePath二選一) | 否 |
TransferUtilityUploadRequest主要參數:
| 參數名 | 類型 | 說明 | 是否必要 |
|---|---|---|---|
| BucketName | string | 桶名 | 是 |
| Key | string | 要上傳的對象名稱 | 是 |
| FilePath | string | 上傳的文件路徑(和InputStream二選一) | 否 |
| InputStream | Stream | 上傳的文件流(和FilePath二選一) | 否 |
| PartSize | long | 分片大小,默認5MB | 否 |
| ContentType | string | 描述上傳文件格式的標準MIME類型 | 否 |
| CannedACL | S3CannedACL | 標準ACL信息(Private|PublicRead) | 否 |
關于Content-Type的配置
Content-Type用于標識文件的資源類型,比如image/png, image/jpg 是圖片類型,video/mpeg, video/mp4是視頻類型,text/plain, text/html是文本類型, 瀏覽器針對不同的Content-Type會有不同的操作,比如圖片類型可以預覽,視頻類型可以播放,文本類型可以直接打開。application/octet-stream類型會直接打開下載窗口。
在dotnet sdk中,如果用戶沒有設置Content-Type,會根據對象的key后綴擴展名自動生成Content-Type。
上傳分片
功能說明
分片上傳操作可以將超過5GB的大文件分割后上傳,一共包含三個步驟:首先,發起分片上傳請求獲取一個upload id。然后,將大文件分割成分片后上傳,除了最后一個分片,每個分片的數據大小為5MB~5GB,每個分片上傳的時候附帶upload id。最后,發送一個帶有upload id的請求,完成分片上傳操作。
代碼示例
using System;
using System.Collections.Generic;
using System.IO;
using System.Threading.Tasks;
using Amazon.Runtime;
using Amazon.S3;
using Amazon.S3.Model;
?
namespace DotNetSDK.ObjectOperation
{
public class UploadPartExample
{
public static async Task UploadPart()
{
var accessKey = "<your-access-key>";
var secretKey = "<your-secret-access-key>";
var endpoint = "<your-endpoint>";
var bucketName = "<your-bucket-name>";
var key = "<your-object-key>";
var filePath = "<file-path>";
try
{
var credentials = new BasicAWSCredentials(accessKey, secretKey);
var conf = new AmazonS3Config
{
ServiceURL = endpoint
};
var s3Client = new AmazonS3Client(credentials, conf);
//1. 發起一個分片上傳操作請求,獲取upload id
var initiateMultipartUploadRequest = new InitiateMultipartUploadRequest()
{
BucketName = bucketName,
Key = key
};
var initiateMultipartUploadResponse = await s3Client.InitiateMultipartUploadAsync(initiateMultipartUploadRequest);
var uploadId = initiateMultipartUploadResponse.UploadId;
Console.WriteLine("upload id: {0}", uploadId);
// 2. 分割大文件然后分片上傳
var partSize = 1024 * 1024 * 16;
var fileInfo = new FileInfo(filePath);
var fileLen = fileInfo.Length;
var partNumber = fileLen / partSize;
if (fileLen % partSize != 0)
{
partNumber++;
}
?
var etagList = new List<PartETag>();
using (var fs = File.Open(filePath, FileMode.Open))
{
for (var i = 0; i < partNumber; i++)
{
var seekBytes = (long) partSize * i;
fs.Seek(seekBytes, 0);
var size = (partSize < fileLen - seekBytes) ? partSize : (fileLen - seekBytes);
var uploadPartRequest = new UploadPartRequest()
{
BucketName = bucketName,
Key = key,
UploadId = uploadId,
InputStream = fs,
PartSize = size,
PartNumber = i + 1
};
// 分片上傳
var uploadPartResponse = await s3Client.UploadPartAsync(uploadPartRequest);
etagList.Add(new PartETag(uploadPartResponse.PartNumber, uploadPartResponse.ETag));
Console.WriteLine("finish upload part {0}/{1}", etagList.Count, partNumber);
}
}
?
// 3. 完成分片上傳
var completeMultipartUploadRequest = new CompleteMultipartUploadRequest()
{
BucketName = bucketName,
Key = key,
UploadId = uploadId
};
foreach (var etag in etagList)
{
completeMultipartUploadRequest.PartETags.Add(etag);
}
?
var completeMultipartUploadResponse = await s3Client.CompleteMultipartUploadAsync(completeMultipartUploadRequest);
if (completeMultipartUploadResponse.HttpStatusCode != System.Net.HttpStatusCode.OK)
{
Console.WriteLine("fail to complete multipart upload, HttpStatusCode:{0}, ErrorCode:{1}.", (int) completeMultipartUploadResponse.HttpStatusCode,
completeMultipartUploadResponse.HttpStatusCode);
}
else
{
Console.WriteLine("complete multipart upload.");
}
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
}
}創建分片上傳任務
InitiateMultipartUpload 用于創建分片上傳任務,返回分片上傳任務的ID。
可設置的參數如下:
| 參數 | 類型 | 說明 | 是否必要 |
|---|---|---|---|
| CannedACL | S3CannedACL | 配置上傳對象的預定義的標準ACL信息 | 否 |
| BucketName | string | 桶的名稱 | 是 |
| ContentType | string | 描述上傳文件格式的標準MIME類型 | 否 |
| Key | string | 上傳文件到媒體存儲服務后對應的key | 是 |
| Metadata | MetadataCollection | 本次請求附帶的元數據信息 | 否 |
| TagSet | List<Tag> | 對象的標簽信息 | 否 |
| WebsiteRedirectLocation | string | 如果桶被配置用于提供網站的靜態數據,該參數可以用于設置訪問對象時候重定向到當前桶下的其他對象或者外部的URL | 否 |
返回的結果如下:
| 參數 | 類型 | 說明 |
|---|---|---|
| BucketName | string | 執行分片上傳的桶的名稱 |
| Key | string | 本次分片上傳對象的名稱 |
| UploadId | string | 本次分片上傳操作Id |
上傳一個分片
UploadPart用于獲取到分片任務upload id之后,通過upload id來上傳分片數據到指定的分片上傳任務對應的對象。
可設置的參數如下:
| 參數 | 類型 | 說明 | 是否必要 |
|---|---|---|---|
| InputStream | Stream | 對象的數據 | 是 |
| BucketName | string | 桶的名稱 | 是 |
| PartSize | long | 說明請求body的長度(單位:字節),該參數可以在body長度不能被自動識別的情況下設置 | 否 |
| MD5Digest | string | 上傳對象數據的base64編碼的128位MD5值,不包含請求頭部的信息 | 否 |
| Key | string | 上傳文件到媒體存儲服務后對應的key | 是 |
| PartNumber | int | 說明當前數據在文件中所屬的分片,大于等于1,小于等于10000 | 是 |
| UploadId | string | 通過InitiateMultipartUpload操作獲取的UploadId,與一個分片上傳的對象對應 | 是 |
返回的結果如下:
| 參數 | 類型 | 說明 |
|---|---|---|
| ETag | string | 本次上傳分片后對應的Entity Tag |
| PartNumber | int | 分片上傳數據在文件中所屬的分片 |
完成分片上傳任務
完成所有分片的上傳之后,調用完成接口CompleteMultipartUpload,服務端會把所有分片合并成對象保存。
可設置的參數如下:
| 參數 | 類型 | 說明 | 是否必要 |
|---|---|---|---|
| BucketName | string | 執行分片上傳的桶的名稱 | 是 |
| Key | string | 上傳文件到媒體存儲服務后對應的key | 是 |
| PartETags | List<PartETag> | 包含了每個已上傳的分片的ETag和PartNUmber等信息 | 否 |
| UploadId | string | 通過CreateMultipartUpload操作獲取的UploadId,與一個對象的分片上傳對應 | 是 |
返回的結果如下:
| 參數 | 類型 | 說明 |
|---|---|---|
| BucketName | string | 執行分片上傳的桶的名稱 |
| ETag | string | 本次上傳對象后對應的Entity Tag |
| Key | string | 上傳文件到媒體存儲服務后對應的key |
| Location | string | 上傳對象后對應的URI |
| VersionId | string | 上傳對象后相應的版本id |
列舉分片上傳任務
功能說明
ListMultipartUploads操作可以列出一個桶中正在進行的分片上傳任務,這些分片上傳任務的請求已經發起,但是還沒完成或者被中止。
代碼示例
using System;
using System.Threading.Tasks;
using Amazon.Runtime;
using Amazon.S3;
using Amazon.S3.Model;
?
namespace DotNetSDK.ObjectOperation
{
public class ListMultipartUploadsExample
{
public static async Task ListMultipartUploads()
{
var accessKey = "<your-access-key>";
var secretKey = "<your-secret-access-key>";
var endpoint = "<your-endpoint>";
var bucketName = "<your-bucket-name>";
var credentials = new BasicAWSCredentials(accessKey, secretKey);
try
{
var conf = new AmazonS3Config
{
ServiceURL = endpoint
};
var s3Client = new AmazonS3Client(credentials, conf);
var listMultipartUploadsRequest = new ListMultipartUploadsRequest()
{
BucketName = bucketName
};
?
var result = await s3Client.ListMultipartUploadsAsync(listMultipartUploadsRequest);
if (result.HttpStatusCode != System.Net.HttpStatusCode.OK)
{
Console.WriteLine("fail to list multipart uploads in bucket {0}, HttpStatusCode:{1}, ErrorCode:{2}.", bucketName, (int) result.HttpStatusCode, result.HttpStatusCode);
return;
}
?
foreach (var multipartUpload in result.MultipartUploads)
{
Console.WriteLine("key: {0}, uploadId: {1}", multipartUpload.Key, multipartUpload.UploadId);
}
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
}
}請求參數
ListMultipartUploads可設置的參數如下:
| 參數 | 類型 | 說明 | 是否必要 |
|---|---|---|---|
| BucketName | 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的分片信息 | 否 |
返回結果
ListMultipartUploads返回的結果如下:
| 參數 | 類型 | 說明 |
|---|---|---|
| BucketName | string | 執行本操作的桶名稱 |
| CommonPrefixes | List<string> | 當請求中設置了Delimiter和Prefix屬性時,所有包含指定的Prefix且第一次出現Delimiter字符的對象key作為一組 |
| Delimiter | string | 與請求中設置的Delimiter一致 |
| IsTruncated | bool | 當為false時表示返回結果中包含了全部符合本次請求查詢條件的分片上傳任務信息,否則只返回了數量為MaxUploads個的任務信息 |
| KeyMarker | string | 返回分片上傳任務列表中的起始對象的key |
| MaxUploads | int | 本次返回結果中包含的分片上傳任務數量的最大值 |
| NextKeyMarker | string | 當IsTruncated為true時,NextKeyMarker可以作為后續查詢已初始化的分片上傳任務請求中的KeyMarker的值 |
| NextUploadIdMarker | string | 當IsTruncated為true時,NextKeyMarker可以作為后續查詢已初始化的分片上傳任務請求中的UploadIdMarker的值 |
| Prefix | string | 限定返回分片中對應對象的key必須以Prefix作為前綴 |
| UploadIdMarker | string | 返回分片上傳任務列表中的起始UploadId |
| MultipartUploads | List<MultipartUpload> | 包含了零個或多個已初始化的分片上傳任務信息的數組。數組中的每一項包含了分片上傳初始化時間、分片上傳操作發起者、對象key、對象所有者、存儲類型和UploadId等信息 |
列舉已上傳的分片
功能說明
ListParts操作可以列出一個分片上傳操作中已經上傳完畢但是還未合并的分片信息。使用ListParts操作需要提供object key和upload id,返回的結果最多包含1000個已上傳的分片信息,默認返回1000個,可以通過設置MaxParts參數的值指定返回結果中分片信息的數量。
代碼示例
using System;
using System.Threading.Tasks;
using Amazon.Runtime;
using Amazon.S3;
using Amazon.S3.Model;
?
namespace DotNetSDK.ObjectOperation
{
public class ListPartsExample
{
public static async Task ListParts()
{
var accessKey = "<your-access-key>";
var secretKey = "<your-secret-access-key>";
var endpoint = "<your-endpoint>";
var bucketName = "<your-bucket-name>";
var key = "<your-object-key>";
var uploadId = "<your-upload-id>";
var credentials = new BasicAWSCredentials(accessKey, secretKey);
try
{
var conf = new AmazonS3Config
{
ServiceURL = endpoint
};
var s3Client = new AmazonS3Client(credentials, conf);
var listPartsRequest = new ListPartsRequest()
{
BucketName = bucketName,
Key = key,
UploadId = uploadId
};
?
var result = await s3Client.ListPartsAsync(listPartsRequest);
if (result.HttpStatusCode != System.Net.HttpStatusCode.OK)
{
Console.WriteLine("fail to list part of uploadId {0}, HttpStatusCode:{1}, ErrorCode:{2}.", uploadId, (int) result.HttpStatusCode, result.HttpStatusCode);
return;
}
?
Console.WriteLine("uploaded parts:");
foreach (var partDetail in result.Parts)
{
Console.WriteLine("Etag:{0}, PartNumber:{1}, Size:{2}.", partDetail.ETag, partDetail.PartNumber, partDetail.Size);
}
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
}
}請求參數
ListParts可設置的參數如下:
| 參數 | 類型 | 說明 | 是否必要 |
|---|---|---|---|
| BucketName | string | 執行本操作的桶名稱 | 是 |
| Key | string | 分片上傳的對象的key | 是 |
| MaxParts | int | 指定返回分片信息的數量,默認值和最大值均為1000 | 否 |
| PartNumberMarker | string | 用于指定返回part number大于PartNumberMarker的分片信息 | 否 |
| UploadId | string | 指定返回該id所屬的分片上傳的分片信息 | 是 |
返回結果
ListParts返回的結果如下:
| 參數 | 類型 | 說明 |
|---|---|---|
| BucketName | string | 執行本操作的桶名稱 |
| IsTruncated | bool | 當為false時表示返回結果中包含了全部符合本次請求查詢條件的上傳分片信息,否則只返回了數量為MaxParts個的分片信息 |
| Key | string | 分片上傳對象的名稱 |
| MaxParts | int | 本次返回結果中包含的上傳分片數量的最大值 |
| NextPartNumberMarker | int | 當IsTruncated為true時,NextPartNumberMarker可以作為后續查詢已上傳分片請求中的PartNumberMarker的值 |
| Owner | Owner | 分片上傳對象的所有者信息,包含了用戶名和Id等信息 |
| Parts | List<PartDetail> | 包含了已上傳分片信息的數組,數組中的每一項包含了該分片的Entity tag、最后修改時間、PartNumber和大小等信息 |
| UploadId | string | 分片上傳操作的id |
復制分片
功能說明
CopyPart操作可以從一個已存在的對象中拷貝指定分片的數據,當拷貝的對象大小超過5GB,必須使用UploadPartCopy操作完成對象的復制。除了最后一個分片外,每個拷貝分片的大小范圍是[5MB,5GB]。在一個在拷貝大對象之前,需要使用CompleteMultiPartUpload操作獲取一個upload id,在完成拷貝操作之后,需要使用CompleteMultipartUpload操作組裝已拷貝的分片成為一個對象。
代碼示例
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Amazon.Runtime;
using Amazon.S3;
using Amazon.S3.Model;
?
namespace DotNetSDK.ObjectOperation
{
public class CopyPartsExample
{
public static async Task CopyParts()
{
var accessKey = "<your-access-key>";
var secretKey = "<your-secret-access-key>";
var endpoint = "<your-endpoint>";
var sourceBucket = "<source-bucket>";
var sourceKey = "<source-key>";
var destinationBucket = "<destination-bucket>";
var destinationKey = "<destination-key>";
try
{
var credentials = new BasicAWSCredentials(accessKey, secretKey);
List<CopyPartResponse> copyResponses = new List<CopyPartResponse>();
var conf = new AmazonS3Config
{
ServiceURL = endpoint
};
var s3Client = new AmazonS3Client(credentials, conf);
// 發起一個分片上傳操作請求,獲取upload id
Task<InitiateMultipartUploadResponse> taskInitiateMultipartUploadResp = s3Client.InitiateMultipartUploadAsync(new InitiateMultipartUploadRequest()
{
BucketName = destinationBucket,
Key = destinationKey
});
var uploadId = taskInitiateMultipartUploadResp.Result.UploadId;
Console.WriteLine("upload id: {0}", uploadId);
// 獲取被拷貝對象的大小
GetObjectMetadataRequest getObjectMetadataRequest = new GetObjectMetadataRequest
{
BucketName = sourceBucket,
Key = sourceKey
};
var getObjectMetadataResponse = await s3Client.GetObjectMetadataAsync(getObjectMetadataRequest);
long objectSize = getObjectMetadataResponse.ContentLength;
// 拷貝分片
long partSize = 5 * (long) Math.Pow(2, 20); // 5 MB.
long bytePosition = 0;
for (int i = 1; bytePosition < objectSize; i++)
{
CopyPartRequest copyPartRequest = new CopyPartRequest
{
DestinationBucket = destinationBucket,
DestinationKey = destinationKey,
SourceBucket = sourceBucket,
SourceKey = sourceKey,
UploadId = uploadId,
FirstByte = bytePosition,
LastByte = bytePosition + partSize - 1 >= objectSize ? objectSize - 1 : bytePosition + partSize - 1,
PartNumber = i
};
var copyPartResponse = await s3Client.CopyPartAsync(copyPartRequest);
copyResponses.Add(copyPartResponse);
bytePosition += partSize;
}
?
// 完成拷貝分片
CompleteMultipartUploadRequest completeRequest =
new CompleteMultipartUploadRequest
{
BucketName = destinationBucket,
Key = destinationKey,
UploadId = uploadId
};
completeRequest.AddPartETags(copyResponses);
CompleteMultipartUploadResponse completeUploadResponse = await s3Client.CompleteMultipartUploadAsync(completeRequest);
if (completeUploadResponse.HttpStatusCode != System.Net.HttpStatusCode.OK)
{
Console.WriteLine("fail to get copy parts, HttpStatusCode:{0}, ErrorCode:{1}.", (int) completeUploadResponse.HttpStatusCode, completeUploadResponse.HttpStatusCode);
return;
}
?
Console.WriteLine("copy object from {0}/{1} to {2}/{3}.", sourceBucket, sourceKey, destinationBucket, destinationKey);
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
}
}請求參數
CopyPart可設置的參數如下:
| 參數 | 類型 | 說明 | 是否必要 |
|---|---|---|---|
| DestinationBucket | string | 放置拷貝生成對象的桶名稱 | 是 |
| DestinationKey | string | 拷貝生成對象的key | 是 |
| SourceBucket | string | 放置被拷貝對象的桶名稱 | 是 |
| SourceKey | string | 被拷貝對象的key | 是 |
| UploadId | string | 與本次拷貝操作相應的分片上傳Id | 是 |
| SourceVersionId | string | 指定被拷貝對象的版本信息,如果不指定,默認拷貝對象的當前版本 | 否 |
返回結果
CopyPart返回的結果如下:
| 參數 | 類型 | 說明 |
|---|---|---|
| ContentLength | long | 拷貝分片的長度 |
| ETag | string | 拷貝分片的ETag |
| LastModified | string | 拷貝分片的最新修改時間 |
| PartNumber | int | 拷貝分片的序號 |
取消分片上傳任務
功能說明
AbortMultipartUpload操作用于終止一個分片上傳任務。當一個分片上傳任務被中止后,不會再有數據通過與之相應的upload id上傳,同時已經被上傳的分片所占用的空間會被釋放。執行AbortMultipartUpload操作后,正在上傳的分片可能會上傳成功也可能會被中止,所以必要的情況下需要執行多次AbortMultipartUpload操作去釋放全部上傳成功的分片所占用的空間。可以通過執行ListParts操作來確認所有中止分片上傳后所有已上傳分片的空間是否被被釋放。
代碼示例
using System;
using System.Threading.Tasks;
using Amazon.Runtime;
using Amazon.S3;
using Amazon.S3.Model;
?
namespace DotNetSDK.ObjectOperation
{
public class AbortMultipartUploadExample
{
public static async Task AbortMultipartUpload()
{
var accessKey = "<your-access-key>";
var secretKey = "<your-secret-access-key>";
var endpoint = "<your-endpoint>";
var bucketName = "<your-bucket-name>";
var key = "<your-object-key>";
var uploadId = "<your-upload-id>";
try
{
var credentials = new BasicAWSCredentials(accessKey, secretKey);
var conf = new AmazonS3Config
{
ServiceURL = endpoint
};
var s3Client = new AmazonS3Client(credentials, conf);
var abortMultipartUploadRequest = new AbortMultipartUploadRequest()
{
BucketName = bucketName,
Key = key,
UploadId = uploadId
};
?
var result = await s3Client.AbortMultipartUploadAsync(abortMultipartUploadRequest);
if (result.HttpStatusCode != System.Net.HttpStatusCode.NoContent)
{
Console.WriteLine("fail to abort multipart upload, uploadId:{0}, HttpStatusCode:{1}, ErrorCode:{2}.", uploadId, (int) result.HttpStatusCode, result.HttpStatusCode);
return;
}
?
Console.WriteLine("aborted multipart upload, uploadId:{0}.", uploadId);
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
}
}請求參數
AbortMultipartUpload可設置的參數如下:
| 參數 | 類型 | 說明 | 是否必要 |
|---|---|---|---|
| BucketName | string | 桶的名稱 | 是 |
| Key | string | 分片上傳的對象的key | 是 |
| UploadId | string | 指定需要終止的分片上傳的id | 是 |