上传对象

最后更新时间:2022-01-17 12:50:00

    简介

    本文档提供关于对象的上传、复制操作相关的 API 概览以及 SDK 示例代码。

    简单操作

    API 操作名 操作描述
    PUT Object 简单上传对象 上传一个对象至存储桶
    POST Object 表单上传对象 使用表单请求上传对象
    PUT Object - Copy 设置对象复制(修改对象属性) 复制文件到目标路径
    APPEND Object 追加上传对象 使用分块追加的方式上传对象

    分块操作

    API 操作名 操作描述
    List Multipart Uploads 查询分块上传 查询正在进行中的分块上传信息
    Initiate Multipart Upload 初始化分块上传 初始化分块上传操作
    Upload Part 上传分块 分块上传对象
    Upload Part - Copy 复制分块 将其他对象复制为一个分块
    List Parts 查询已上传块 查询特定分块上传操作中的已上传的块
    Complete Multipart Upload 完成分块上传 完成整个文件的分块上传
    Abort Multipart Upload 终止分块上传 终止一个分块上传操作并删除已上传的块

    SDK API 参考

    SDK 所有接口的具体参数与方法说明,请参考 SDK API

    高级接口(推荐)

    上传对象

    功能说明

    高级接口封装了简单上传、分块上传接口,根据文件大小智能的选择上传方式,同时支持续传功能。

    说明:

    • 文件大小小于分块阈值时选择简单上传,超过阈值时使用分块上传,阈值支持用户自行配置,默认为5MB。
    • 分块大小支持用户自行配置,默认为1MB。
    • 针对.NET Framework 4.0 及以下的用户,高级接口暂不可用,详见向下兼容指南

    示例代码一: 高级接口上传本地文件

    using COSXML.Model.Object;
    using COSXML.Auth;
    using COSXML.Transfer;
    using System;
    using COSXML;
    namespace COSSnippet
    {
       public class TransferUploadObjectModel {
          private CosXml cosXml;
          TransferUploadObjectModel() {
           CosXmlConfig config = new CosXmlConfig.Builder()
             .SetRegion("COS_REGION") // 设置默认的区域, COS 地域的简称请参照 https://intl.cloud.tencent.com/document/product/436/6224?from_cn_redirect=1
             .Build();
    
           string secretId = "SECRET_ID";   // 云 API 密钥 SecretId, 获取 API 密钥请参照 https://console.cloud.tencent.com/cam/capi
           string secretKey = "SECRET_KEY"; // 云 API 密钥 SecretKey, 获取 API 密钥请参照 https://console.cloud.tencent.com/cam/capi
           long durationSecond = 600;          //每次请求签名有效时长,单位为秒
           QCloudCredentialProvider qCloudCredentialProvider = new DefaultQCloudCredentialProvider(secretId, 
             secretKey, durationSecond);
    
           this.cosXml = new CosXmlServer(config, qCloudCredentialProvider);
         }
          /// 高级接口上传文件
         public async void TransferUploadFile()
         {
           // 初始化 TransferConfig
           TransferConfig transferConfig = new TransferConfig();
    
           // 初始化 TransferManager
           TransferManager transferManager = new TransferManager(cosXml, transferConfig);
           // 存储桶名称,此处填入格式必须为 bucketname-APPID, 其中 APPID 获取参考 https://console.cloud.tencent.com/developer
           String bucket = "examplebucket-1250000000"; 
           String cosPath = "exampleobject"; //对象在存储桶中的位置标识符,即称对象键
           String srcPath = @"temp-source-file";//本地文件绝对路径
    
           // 上传对象
           COSXMLUploadTask uploadTask = new COSXMLUploadTask(bucket, cosPath);
           uploadTask.SetSrcPath(srcPath);
    
           uploadTask.progressCallback = delegate (long completed, long total)
           {
               Console.WriteLine(String.Format("progress = {0:##.##}%", completed * 100.0 / total));
           };
            try {
             COSXML.Transfer.COSXMLUploadTask.UploadTaskResult result = await 
               transferManager.UploadAsync(uploadTask);
             Console.WriteLine(result.GetResultInfo());
             string eTag = result.eTag;
           } catch (Exception e) {
               Console.WriteLine("CosException: " + e);
           }
          }
          static void Main(string[] args)
         {
           TransferUploadObjectModel m = new TransferUploadObjectModel();
           /// 高级接口上传对象
           m.TransferUploadFile();
           // .cssg-methods-pragma
         }
       }
    }
    
    说明:

    • 更多完整示例,请前往 GitHub 查看。
    • 上传之后,您可以用同样的 Key 生成文件下载链接,具体使用方法见生成预签名链接。但注意,如果您的文件是私有读权限,那么下载链接只有一定的有效期。

    示例代码二: 上传二进制数据

    try
    {
     // 存储桶名称,此处填入格式必须为 bucketname-APPID, 其中 APPID 获取参考 https://console.cloud.tencent.com/developer
     string bucket = "examplebucket-1250000000";
     string cosPath = "exampleObject"; // 对象键
     byte[] data = new byte[1024]; // 二进制数据
     PutObjectRequest putObjectRequest = new PutObjectRequest(bucket, cosPath, data);
     // 发起请求
     cosXml.PutObject(putObjectRequest);
     // 对象的 eTag
     string eTag = result.eTag;
     // 对象的 crc64ecma 校验值
     string crc64ecma = result.crc64ecma;
     // 打印请求结果
     Console.WriteLine(result.GetResultInfo());
    }
    catch (COSXML.CosException.CosClientException clientEx)
    {
     //请求失败
     Console.WriteLine("CosClientException: " + clientEx);
    }
    catch (COSXML.CosException.CosServerException serverEx)
    {
     //请求失败
     Console.WriteLine("CosServerException: " + serverEx.GetInfo());
    }
    
    说明:

    • 更多完整示例,请前往 GitHub 查看。
    • 上传之后,您可以用同样的 Key 生成文件下载链接,具体使用方法见生成预签名链接。但注意,如果您的文件是私有读权限,那么下载链接只有一定的有效期。

    示例代码三: 从文件流上传

    try
    {
     // 存储桶名称,此处填入格式必须为 bucketname-APPID, 其中 APPID 获取参考 https://console.cloud.tencent.com/developer
     string bucket = "examplebucket-1250000000";
     string key = "exampleobject"; //对象键
     string srcPath = @"temp-source-file";//本地文件绝对路径
     // 打开只读的文件流对象
     FileStream fileStream = new FileStream(srcPath, FileMode.Open, FileAccess.Read);
     // 组装上传请求,其中 offset sendLength 为可选参数
     long offset = 0L;
     long sendLength = fileStream.Length;
     PutObjectRequest request = new PutObjectRequest(bucket, key, fileStream, offset, sendLength);
     //设置进度回调
     request.SetCosProgressCallback(delegate (long completed, long total)
     {
       Console.WriteLine(String.Format("progress = {0:##.##}%", completed * 100.0 / total));
     });
     //执行请求
     PutObjectResult result = cosXml.PutObject(request);
     //关闭文件流
     fileStream.Close();
     //对象的 eTag
     string eTag = result.eTag;
     //对象的 crc64ecma 校验值
     string crc64ecma = result.crc64ecma;
     //打印请求结果
     Console.WriteLine(result.GetResultInfo());
    }
    catch (COSXML.CosException.CosClientException clientEx)
    {
     //请求失败
     Console.WriteLine("CosClientException: " + clientEx);
    }
    catch (COSXML.CosException.CosServerException serverEx)
    {
     //请求失败
     Console.WriteLine("CosServerException: " + serverEx.GetInfo());
    }
    
    说明:

    • 文件流上传特性从 5.4.24 版本开始支持,下载新版SDK前往 Releases 或参见 快速入门
    • 查看 Changelog 版本请前往 GitHub
    • 更多完整示例,请前往 GitHub 查看。
    • 上传之后,您可以用同样的 Key 生成文件下载链接,具体使用方法见生成预签名链接。但注意,如果您的文件是私有读权限,那么下载链接只有一定的有效期。

    示例代码四: 上传暂停、继续与取消

    对于上传任务,可以通过以下方式暂停:

    uploadTask.Pause();
    

    暂停之后,可以通过以下方式续传:

    uploadTask.Resume();
    

    也通过以下方式取消上传:

    uploadTask.Cancel();
    
    说明:

    更多完整示例,请前往 GitHub 查看。

    示例代码五: 批量上传

    TransferConfig transferConfig = new TransferConfig();
    // 初始化 TransferManager
    TransferManager transferManager = new TransferManager(cosXml, transferConfig);
    // 存储桶名称,此处填入格式必须为 bucketname-APPID, 其中 APPID 获取参考 https://console.cloud.tencent.com/developer
    string bucket = "examplebucket-1250000000";
    for (int i = 0; i < 5; i++) {
     // 上传对象
     string cosPath = "exampleobject" + i; //对象在存储桶中的位置标识符,即称对象键
     string srcPath = @"temp-source-file";//本地文件绝对路径
     COSXMLUploadTask uploadTask = new COSXMLUploadTask(bucket, cosPath); 
     uploadTask.SetSrcPath(srcPath);
     await transferManager.UploadAsync(uploadTask);
    }
    

    示例代码六:创建目录

    try
    {
     // 存储桶名称,此处填入格式必须为 bucketname-APPID, 其中 APPID 获取参考 https://console.cloud.tencent.com/developer
     string bucket = "examplebucket-1250000000";
     string cosPath = "dir/"; // 对象键
     PutObjectRequest putObjectRequest = new PutObjectRequest(bucket, cosPath, new byte[0]);
    
     cosXml.PutObject(putObjectRequest);
    }
    catch (COSXML.CosException.CosClientException clientEx)
    {
     //请求失败
     Console.WriteLine("CosClientException: " + clientEx);
    }
    catch (COSXML.CosException.CosServerException serverEx)
    {
     //请求失败
     Console.WriteLine("CosServerException: " + serverEx.GetInfo());
    }
    
    说明:

    • 更多完整示例,请前往 GitHub 查看。
    • 上传之后,您可以用同样的 Key 生成文件下载链接,具体使用方法见生成预签名链接。但注意,如果您的文件是私有读权限,那么下载链接只有一定的有效期。

    复制对象

    功能说明

    高级接口封装了简单复制、分块复制接口的异步请求,并支持暂停、恢复以及取消复制请求。

    说明:

    • 对象大小小于分块阈值时选择简单复制,超过阈值时使用分块复制,阈值支持用户自行配置,默认为5MB。
    • 分块大小支持用户自行配置,默认为2MB。

    示例代码

    // 初始化 TransferConfig
    TransferConfig transferConfig = new TransferConfig();
    //手动设置分块复制阈值,小于阈值的对象使用简单复制,大于阈值的对象使用分块复制,不设定则默认为5MB
    transferConfig.DivisionForCopy = 5242880;
    //手动设置高级接口的自动分块大小,不设定则默认为2MB
    transferConfig.SliceSizeForCopy = 2097152;
    // 初始化 TransferManager
    TransferManager transferManager = new TransferManager(cosXml, transferConfig);
    string sourceAppid = "1250000000"; //账号 appid
    string sourceBucket = "sourcebucket-1250000000"; //"源对象所在的存储桶
    string sourceRegion = "COS_REGION"; //源对象的存储桶所在的地域
    string sourceKey = "sourceObject"; //源对象键
    //构造源对象属性
    CopySourceStruct copySource = new CopySourceStruct(sourceAppid, sourceBucket, 
       sourceRegion, sourceKey);
    string bucket = "examplebucket-1250000000"; //目标存储桶,格式:BucketName-APPID
    string key = "exampleobject"; //目标对象的对象键
    COSXMLCopyTask copytask = new COSXMLCopyTask(bucket, key, copySource);
    try {
     COSXML.Transfer.COSXMLCopyTask.CopyTaskResult result = await 
       transferManager.CopyAsync(copytask);
     Console.WriteLine(result.GetResultInfo());
     string eTag = result.eTag;
    } catch (Exception e) {
       Console.WriteLine("CosException: " + e);
    }
    
    说明:

    更多完整示例,请前往 GitHub 查看。

    简单操作

    简单上传对象

    功能说明

    PUT Object 接口可以上传一个对象至指定存储桶中,该操作需要请求者对存储桶有 WRITE 权限。最大支持上传不超过5GB的对象,5GB以上对象请使用 分块上传高级接口 上传。

    注意:

    • Key(文件名)不能以/结尾,否则会被识别为文件夹。
    • 每个主账号(即同一个 APPID),存储桶的 ACL 规则数量最多为1000条,对象 ACL 规则数量不限制。如果您不需要进行对象 ACL 控制,请在上传时不要设置,默认继承存储桶权限。

    示例代码

    try
    {
     // 存储桶名称,此处填入格式必须为 bucketname-APPID, 其中 APPID 获取参考 https://console.cloud.tencent.com/developer
     string bucket = "examplebucket-1250000000";
     string key = "exampleobject"; //对象键
     string srcPath = @"temp-source-file";//本地文件绝对路径
      PutObjectRequest request = new PutObjectRequest(bucket, key, srcPath);
     //设置进度回调
     request.SetCosProgressCallback(delegate (long completed, long total)
     {
       Console.WriteLine(String.Format("progress = {0:##.##}%", completed * 100.0 / total));
     });
     //执行请求
     PutObjectResult result = cosXml.PutObject(request);
     //对象的 eTag
     string eTag = result.eTag;
    }
    catch (COSXML.CosException.CosClientException clientEx)
    {
     //请求失败
     Console.WriteLine("CosClientException: " + clientEx);
    }
    catch (COSXML.CosException.CosServerException serverEx)
    {
     //请求失败
     Console.WriteLine("CosServerException: " + serverEx.GetInfo());
    }
    
    说明:

    • 更多完整示例,请前往 GitHub 查看。
    • 上传之后,您可以用同样的 Key 生成文件下载链接,具体使用方法见生成预签名链接。但注意,如果您的文件是私有读权限,那么下载链接只有一定的有效期。

    表单上传对象

    功能说明

    使用表单请求上传对象。

    示例代码

    try
    {
     // 存储桶名称,此处填入格式必须为 bucketname-APPID, 其中 APPID 获取参考 https://console.cloud.tencent.com/developer
     string bucket = "examplebucket-1250000000";
     string key = "exampleobject"; //对象键
     string srcPath = @"temp-source-file";//本地文件绝对路径
     PostObjectRequest request = new PostObjectRequest(bucket, key, srcPath);
     //设置进度回调
     request.SetCosProgressCallback(delegate (long completed, long total)
     {
       Console.WriteLine(String.Format("progress = {0:##.##}%", completed * 100.0 / total));
     });
     //执行请求
     PostObjectResult result = cosXml.PostObject(request);
     //请求成功
     Console.WriteLine(result.GetResultInfo());
    }
    catch (COSXML.CosException.CosClientException clientEx)
    {
     //请求失败
     Console.WriteLine("CosClientException: " + clientEx);
    }
    catch (COSXML.CosException.CosServerException serverEx)
    {
     //请求失败
     Console.WriteLine("CosServerException: " + serverEx.GetInfo());
    }
    
    说明:

    更多完整示例,请前往 GitHub 查看。

    复制对象(修改属性)

    功能说明

    复制文件到目标路径(PUT Object-Copy)。
    复制对象接口,能够在复制请求中设置修改对象属性及元数据,并且支持原地复制,即能够支持原地修改对象元数据的特性

    示例代码一: 复制对象时保留对象属性

    try
    {
     string sourceAppid = "1250000000"; //账号 appid
     string sourceBucket = "sourcebucket-1250000000"; //"源对象所在的存储桶
     string sourceRegion = "COS_REGION"; //源对象的存储桶所在的地域
     string sourceKey = "sourceObject"; //源对象键
     //构造源对象属性
     CopySourceStruct copySource = new CopySourceStruct(sourceAppid, sourceBucket, 
       sourceRegion, sourceKey);
      // 存储桶名称,此处填入格式必须为 bucketname-APPID, 其中 APPID 获取参考 https://console.cloud.tencent.com/developer
     string bucket = "examplebucket-1250000000";
     string key = "exampleobject"; //对象键
     CopyObjectRequest request = new CopyObjectRequest(bucket, key);
     //设置拷贝源
     request.SetCopySource(copySource);
     //设置是否拷贝还是更新,此处是拷贝
     request.SetCopyMetaDataDirective(COSXML.Common.CosMetaDataDirective.Copy);
     //执行请求
     CopyObjectResult result = cosXml.CopyObject(request);
     //请求成功
     Console.WriteLine(result.GetResultInfo());
    }
    catch (COSXML.CosException.CosClientException clientEx)
    {
     //请求失败
     Console.WriteLine("CosClientException: " + clientEx);
    }
    catch (COSXML.CosException.CosServerException serverEx)
    {
     //请求失败
     Console.WriteLine("CosServerException: " + serverEx.GetInfo());
    }
    
    说明:

    更多完整示例,请前往 GitHub 查看。

    示例代码二: 修改对象存储类型

    说明:

    • 标准存储可以修改为低频存储、智能分层存储、归档存储和深度归档存储等。
    • 如果希望将归档存储或深度归档存储的对象修改为其他存储类型,首先需要使用 PostRestore 将归档存储或深度归档存储的对象回热,才能使用该接口请求修改存储类型。
    • 关于存储类型的详细说明请参见 存储类型概述
    try
    {
     // 存储桶名称,此处填入格式必须为 bucketname-APPID, 其中 APPID 获取参考 https://console.cloud.tencent.com/developer
     string bucket = "examplebucket-1250000000";
     string key = "exampleobject"; //对象键
     string appId = "1250000000"; //账号 appid
     string region = "COS_REGION"; //源对象的存储桶所在的地域
     //构造对象属性
     CopySourceStruct copySource = new CopySourceStruct(appId, bucket, 
       region, key);
      CopyObjectRequest request = new CopyObjectRequest(bucket, key);
     //设置拷贝源
     request.SetCopySource(copySource);
     //设置是否拷贝还是更新,此处是拷贝
     request.SetCopyMetaDataDirective(COSXML.Common.CosMetaDataDirective.Replaced);
     // 修改为归档存储
     request.SetCosStorageClass("ARCHIVE");
     //执行请求
     CopyObjectResult result = cosXml.CopyObject(request);
     //请求成功
     Console.WriteLine(result.GetResultInfo());
    }
    catch (COSXML.CosException.CosClientException clientEx)
    {
     //请求失败
     Console.WriteLine("CosClientException: " + clientEx);
    }
    catch (COSXML.CosException.CosServerException serverEx)
    {
     //请求失败
     Console.WriteLine("CosServerException: " + serverEx.GetInfo());
    }
    
    说明:

    更多完整示例,请前往 GitHub 查看。

    示例代码三: 复制对象时替换对象属性

    try
    {
     string sourceAppid = "1250000000"; //账号 appid
     string sourceBucket = "sourcebucket-1250000000"; //"源对象所在的存储桶
     string sourceRegion = "COS_REGION"; //源对象的存储桶所在的地域
     string sourceKey = "sourceObject"; //源对象键
     //构造源对象属性
     CopySourceStruct copySource = new CopySourceStruct(sourceAppid, sourceBucket, 
       sourceRegion, sourceKey);
      // 存储桶名称,此处填入格式必须为 bucketname-APPID, 其中 APPID 获取参考 https://console.cloud.tencent.com/developer
     string bucket = "examplebucket-1250000000";
     string key = "exampleobject"; //对象键
     CopyObjectRequest request = new CopyObjectRequest(bucket, key);
     //设置拷贝源
     request.SetCopySource(copySource);
     //设置是否拷贝还是更新,此处是拷贝
     request.SetCopyMetaDataDirective(COSXML.Common.CosMetaDataDirective.Replaced);
     // 替换元数据
     request.SetRequestHeader("Content-Disposition", "attachment; filename=example.jpg");
     //执行请求
     CopyObjectResult result = cosXml.CopyObject(request);
     //请求成功
     Console.WriteLine(result.GetResultInfo());
    }
    catch (COSXML.CosException.CosClientException clientEx)
    {
     //请求失败
     Console.WriteLine("CosClientException: " + clientEx);
    }
    catch (COSXML.CosException.CosServerException serverEx)
    {
     //请求失败
     Console.WriteLine("CosServerException: " + serverEx.GetInfo());
    }
    
    说明:

    更多完整示例,请前往 GitHub 查看。

    示例代码四: 修改对象元数据

    try
    {
     // 存储桶名称,此处填入格式必须为 bucketname-APPID, 其中 APPID 获取参考 https://console.cloud.tencent.com/developer
     string bucket = "examplebucket-1250000000";
     string key = "exampleobject"; //对象键
     string appId = "1250000000"; //账号 appid
     string region = "COS_REGION"; //源对象的存储桶所在的地域
     //构造对象属性
     CopySourceStruct copySource = new CopySourceStruct(appId, bucket, 
       region, key);
      CopyObjectRequest request = new CopyObjectRequest(bucket, key);
     //设置拷贝源
     request.SetCopySource(copySource);
     //设置是否拷贝还是更新,此处是拷贝
     request.SetCopyMetaDataDirective(COSXML.Common.CosMetaDataDirective.Replaced);
     // 替换元数据
     request.SetRequestHeader("Content-Disposition", "attachment; filename=example.jpg");
     request.SetRequestHeader("Content-Type", "image/png");
     //执行请求
     CopyObjectResult result = cosXml.CopyObject(request);
     //请求成功
     Console.WriteLine(result.GetResultInfo());
    }
    catch (COSXML.CosException.CosClientException clientEx)
    {
     //请求失败
     Console.WriteLine("CosClientException: " + clientEx);
    }
    catch (COSXML.CosException.CosServerException serverEx)
    {
     //请求失败
     Console.WriteLine("CosServerException: " + serverEx.GetInfo());
    }
    
    说明:

    更多完整示例,请前往 GitHub 查看。

    追加上传对象

    功能说明

    使用分块追加的方式上传对象。

    说明:

    此功能从 5.4.22 版本开始支持,查看 Changelog 版本请前往 GitHub

    示例代码

    try
    {
       // 存储桶名称,此处填入格式必须为 bucketname-APPID, 其中 APPID 获取参考 https://console.cloud.tencent.com/developer
       string bucket = "examplebucket-1250000000";
       string key = "exampleobject"; //对象键
       string srcPath = @"temp-source-file";//本地文件绝对路径
        //首次append上传,追加位置传0,创建一个appendable对象
       long next_append_position = 0;
       AppendObjectRequest request = new AppendObjectRequest(bucket, key, srcPath, next_append_position);
       //设置进度回调
       request.SetCosProgressCallback(delegate (long completed, long total)
       {
           Console.WriteLine(String.Format("progress = {0:##.##}%", completed * 100.0 / total));
       });
       AppendObjectResult result = cosXml.AppendObject(request);
       //获取下次追加位置
       next_append_position = result.nextAppendPosition;
       Console.WriteLine(result.GetResultInfo());
        //执行追加,传入上次获取的对象末尾
       request = new AppendObjectRequest(bucket, key, srcPath, next_append_position);
       request.SetCosProgressCallback(delegate (long completed, long total)
       {
           Console.WriteLine(String.Format("progress = {0:##.##}%", completed * 100.0 / total));
       });
       result = cosXml.AppendObject(request);
       Console.WriteLine(result.GetResultInfo());
    }
    catch (COSXML.CosException.CosClientException clientEx)
    {
       //请求失败
       Console.WriteLine("CosClientException: " + clientEx);
    }
    catch (COSXML.CosException.CosServerException serverEx)
    {
       //请求失败
       Console.WriteLine("CosServerException: " + serverEx.GetInfo());
    }
    
    说明:

    更多完整示例,请前往 GitHub 查看。

    分块操作

    这里说明下分块上传的流程。

    分块上传与复制的流程

    1. 初始化分块上传(Initiate Multipart Upload),得到 UploadId。
    2. 使用 UploadId 上传分块(Upload Part),或者复制分块(Upload Part Copy)。
    3. 完成分块上传(Complete Multipart Upload)。

    分块继续上传与复制的流程

    1. 如果没有记录 UploadId,查询分块上传任务(List Multipart Uploads),得到对应文件的 UploadId。
    2. 使用 UploadId 列出已上传的分块(List Parts)。
    3. 使用 UploadId 上传剩余的分块(Upload Part),或者复制剩余的分块(Upload Part Copy)。
    4. 完成分块上传(Complete Multipart Upload)。

    终止分块上传与复制的流程

    1. 如果没有记录 UploadId,查询分块上传任务(List Multipart Uploads),得到对应文件的 UploadId。
    2. 终止分块上传并删除已上传分块(Abort Multipart Upload)。

    查询分块上传

    功能说明

    查询指定存储桶中正在进行的分块上传(List Multipart Uploads)。

    示例代码

    try
    {
     // 存储桶名称,此处填入格式必须为 bucketname-APPID, 其中 APPID 获取参考 https://console.cloud.tencent.com/developer
     string bucket = "examplebucket-1250000000";
     ListMultiUploadsRequest request = new ListMultiUploadsRequest(bucket);
     //执行请求
     ListMultiUploadsResult result = cosXml.ListMultiUploads(request);
     //请求成功
     Console.WriteLine(result.GetResultInfo());
    }
    catch (COSXML.CosException.CosClientException clientEx)
    {
     //请求失败
     Console.WriteLine("CosClientException: " + clientEx);
    }
    catch (COSXML.CosException.CosServerException serverEx)
    {
     //请求失败
     Console.WriteLine("CosServerException: " + serverEx.GetInfo());
    }
    
    说明:

    更多完整示例,请前往 GitHub 查看。

    初始化分块上传

    功能说明

    初始化 Multipart Upload 上传操作,获取对应的 uploadId(Initiate Multipart Upload)。

    示例代码

    try
    {
     // 存储桶名称,此处填入格式必须为 bucketname-APPID, 其中 APPID 获取参考 https://console.cloud.tencent.com/developer
     string bucket = "examplebucket-1250000000";
     string key = "exampleobject"; //对象键
     InitMultipartUploadRequest request = new InitMultipartUploadRequest(bucket, key);
     //执行请求
     InitMultipartUploadResult result = cosXml.InitMultipartUpload(request);
     //请求成功
     this.uploadId = result.initMultipartUpload.uploadId; //用于后续分块上传的 uploadId
     Console.WriteLine(result.GetResultInfo());
    }
    catch (COSXML.CosException.CosClientException clientEx)
    {
     //请求失败
     Console.WriteLine("CosClientException: " + clientEx);
    }
    catch (COSXML.CosException.CosServerException serverEx)
    {
     //请求失败
     Console.WriteLine("CosServerException: " + serverEx.GetInfo());
    }
    
    说明:

    更多完整示例,请前往 GitHub 查看。

    上传分块

    功能说明

    分块上传对象(Upload Part)。

    示例代码

    try
    {
     // 存储桶名称,此处填入格式必须为 bucketname-APPID, 其中 APPID 获取参考 https://console.cloud.tencent.com/developer
     string bucket = "examplebucket-1250000000";
     string key = "exampleobject"; //对象键
     string uploadId = "exampleUploadId"; //初始化分块上传返回的uploadId
     int partNumber = 1; //分块编号,必须从1开始递增
     string srcPath = @"temp-source-file";//本地文件绝对路径
     UploadPartRequest request = new UploadPartRequest(bucket, key, partNumber, 
       uploadId, srcPath, 0, -1);
     //设置进度回调
     request.SetCosProgressCallback(delegate (long completed, long total)
     {
       Console.WriteLine(String.Format("progress = {0:##.##}%", completed * 100.0 / total));
     });
     //执行请求
     UploadPartResult result = cosXml.UploadPart(request);
     //请求成功
     //获取返回分块的eTag,用于后续CompleteMultiUploads
     this.eTag = result.eTag;
     Console.WriteLine(result.GetResultInfo());
    }
    catch (COSXML.CosException.CosClientException clientEx)
    {
     //请求失败
     Console.WriteLine("CosClientException: " + clientEx);
    }
    catch (COSXML.CosException.CosServerException serverEx)
    {
     //请求失败
     Console.WriteLine("CosServerException: " + serverEx.GetInfo());
    }
    
    说明:

    更多完整示例,请前往 GitHub 查看。

    复制分块

    功能说明

    将其他对象复制为一个分块 (Upload Part-Copy)。

    示例代码

    try
    {
     string sourceAppid = "1250000000"; //账号 appid
     string sourceBucket = "sourcebucket-1250000000"; //"源对象所在的存储桶
     string sourceRegion = "COS_REGION"; //源对象的存储桶所在的地域
     string sourceKey = "sourceObject"; //源对象键
     //构造源对象属性
     COSXML.Model.Tag.CopySourceStruct copySource = new CopySourceStruct(sourceAppid, 
       sourceBucket, sourceRegion, sourceKey);
      // 存储桶名称,此处填入格式必须为 bucketname-APPID, 其中 APPID 获取参考 https://console.cloud.tencent.com/developer
     string bucket = "examplebucket-1250000000";
     string key = "exampleobject"; //对象键
     string uploadId = this.uploadId; //初始化分块上传返回的uploadId
     int partNumber = 1; //分块编号,必须从1开始递增
     UploadPartCopyRequest request = new UploadPartCopyRequest(bucket, key, 
       partNumber, uploadId);
     //设置拷贝源
     request.SetCopySource(copySource);
     //设置复制分块(指定块的范围,如 0 ~ 1M)
     request.SetCopyRange(0, 1024 * 1024);
     //执行请求
     UploadPartCopyResult result = cosXml.PartCopy(request);
     //请求成功
     //获取返回分块的eTag,用于后续CompleteMultiUploads
     this.eTag = result.copyPart.eTag;
     Console.WriteLine(result.GetResultInfo());
    }
    catch (COSXML.CosException.CosClientException clientEx)
    {
     //请求失败
     Console.WriteLine("CosClientException: " + clientEx);
    }
    catch (COSXML.CosException.CosServerException serverEx)
    {
     //请求失败
     Console.WriteLine("CosServerException: " + serverEx.GetInfo());
    }
    
    说明:

    更多完整示例,请前往 GitHub 查看。

    查询已上传的分块

    功能说明

    查询特定分块上传操作中的已上传的块(List Parts)。

    示例代码

    try
    {
     // 存储桶名称,此处填入格式必须为 bucketname-APPID, 其中 APPID 获取参考 https://console.cloud.tencent.com/developer
     string bucket = "examplebucket-1250000000";
     string key = "exampleobject"; //对象键
     string uploadId = "exampleUploadId"; //初始化分块上传返回的uploadId
     ListPartsRequest request = new ListPartsRequest(bucket, key, uploadId);
     //执行请求
     ListPartsResult result = cosXml.ListParts(request);
     //请求成功
     //列举已上传的分块
     List<COSXML.Model.Tag.ListParts.Part> alreadyUploadParts = result.listParts.parts;
     Console.WriteLine(result.GetResultInfo());
    }
    catch (COSXML.CosException.CosClientException clientEx)
    {
     //请求失败
     Console.WriteLine("CosClientException: " + clientEx);
    }
    catch (COSXML.CosException.CosServerException serverEx)
    {
     //请求失败
     Console.WriteLine("CosServerException: " + serverEx.GetInfo());
    }
    
    说明:

    更多完整示例,请前往 GitHub 查看。

    完成分块上传

    功能说明

    完成整个文件的分块上传(Complete Multipart Upload)。

    示例代码

    try
    {
     // 存储桶名称,此处填入格式必须为 bucketname-APPID, 其中 APPID 获取参考 https://console.cloud.tencent.com/developer
     string bucket = "examplebucket-1250000000";
     string key = "exampleobject"; //对象键
     string uploadId = "exampleUploadId"; //初始化分块上传返回的uploadId
     CompleteMultipartUploadRequest request = new CompleteMultipartUploadRequest(bucket, 
       key, uploadId);
     //设置已上传的parts,必须有序,按照partNumber递增
     request.SetPartNumberAndETag(1, this.eTag);
     //执行请求
     CompleteMultipartUploadResult result = cosXml.CompleteMultiUpload(request);
     //请求成功
     Console.WriteLine(result.GetResultInfo());
    }
    catch (COSXML.CosException.CosClientException clientEx)
    {
     //请求失败
     Console.WriteLine("CosClientException: " + clientEx);
    }
    catch (COSXML.CosException.CosServerException serverEx)
    {
     //请求失败
     Console.WriteLine("CosServerException: " + serverEx.GetInfo());
    }
    
    说明:

    更多完整示例,请前往 GitHub 查看。

    终止分块上传

    功能说明

    终止一个分块上传操作并删除已上传的块(Abort Multipart Upload)。

    示例代码

    try
    {
     // 存储桶名称,此处填入格式必须为 bucketname-APPID, 其中 APPID 获取参考 https://console.cloud.tencent.com/developer
     string bucket = "examplebucket-1250000000";
     string key = "exampleobject"; //对象键
     string uploadId = "exampleUploadId"; //初始化分块上传返回的uploadId
     AbortMultipartUploadRequest request = new AbortMultipartUploadRequest(bucket, key, uploadId);
     //执行请求
     AbortMultipartUploadResult result = cosXml.AbortMultiUpload(request);
     //请求成功
     Console.WriteLine(result.GetResultInfo());
    }
    catch (COSXML.CosException.CosClientException clientEx)
    {
     //请求失败
     Console.WriteLine("CosClientException: " + clientEx);
    }
    catch (COSXML.CosException.CosServerException serverEx)
    {
     //请求失败
     Console.WriteLine("CosServerException: " + serverEx.GetInfo());
    }
    
    说明:

    更多完整示例,请前往 GitHub 查看。