Skip to content

up1415/OssSDK-.net-4.5

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

36 Commits
 
 
 
 

Repository files navigation

OssSDK .Net 4.5

一 简介

用C#做客户端时,发现官网上发布的.Net SDK 不太好用。正逢微软发布vs2012和 .net4.5,在原来的.net sdk代码基础上重写了SDK。接口与原来的基本保持一致。 新SDK API基于TPL (Task Parallel Library)。

二 新增功能

1 所有API均为异步,可以用async, await很方便的调用异步操作请求, 且效率很高。对客户端UI的操作平滑性有很好的支持。 2 在put和get object接口中添加HttpProcess callback的Action参数,可以回调下载以及上传的数据进度。(Percent, BytesTransferred, TotalBytes) 3 在put和get object接口中添加 CancellationToken参数,可以取消上传或下载的任务。4 增加MultiPart Upload的API,支持分块上传。

三 源代码网络地址

https://github.com/ZhongleiYang/sdk 9月初我在社区开源过这个SDK源代http://bbs.aliyun.com/read.php?tid=120577&fpage=5 后来因为客户端代码的关系,改变了源代码地址。

四 API

API位于命名空间位于Oss. OssClient,调用API成功则返回,错误抛异常。 所有API如下:

    //创建OssClient对象
    public OssClient(string accessId, string accessKey);           
    public OssClient(string endpoint, string accessId, string accessKey);
    public OssClient(Uri endpoint, string accessId, string accessKey);

    //创建Bucket
    public async Task<Bucket> CreateBucket(string bucketName);

    //删除Bucket
    public async Task DeleteBucket(string bucketName);

   //获得Bucket的权限
    public async Task<AccessControlList> GetBucketAcl(string bucketName)
   
    //设置Bucket的权限
    public async Task SetBucketAcl(string bucketName, CannedAccessControlList acl);

    //获得所有的Bucket
    public async Task<IEnumerable<Bucket>> ListBuckets();
    
    //上传Object
    public async Task<PutObjectResult> PutObject(string bucketName, string key, Stream content, ObjectMetadata metadata, 
        Action<HttpProcessData> uploadProcessCallback = null, CancellationToken? cancellationToken = null);
 

    //列举Objects
   public async Task<ObjectListing> ListObjects(string bucketName);
   public async Task<ObjectListing> ListObjects(string bucketName, string prefix);
   public async Task<ObjectListing> ListObjects(ListObjectsRequest listObjectsRequest);
 
    //下载Object
    public async Task<OssObject> GetObject(string bucketName, string key, 
        Action<HttpProcessData> downloadProcessCallback = null, CancellationToken? cancellationToken = null);

    public async Task<OssObject> GetObject(GetObjectRequest getObjectRequest,
        Action<HttpProcessData> downloadProcessCallback = null, CancellationToken? cancellationToken = null);
   
    public async Task<ObjectMetadata> GetObject(GetObjectRequest getObjectRequest, Stream output,
        Action<HttpProcessData> downloadProcessCallback = null, CancellationToken? cancellationToken = null);
    
    //获得Object的MetaData
    public async  Task<ObjectMetadata> GetObjectMetadata(string bucketName, string key);
   
   //删除Object
    public async Task DeleteObject(string bucketName, string key);
 
   //初始化多块上传,返回updateId
    public async Task<string> MultipartUploadInitiate(string bucketName, string key);

    //分块上传
    public async Task<MultipartUploadResult> MultipartUpload(MultiUploadRequestData multiUploadObject,
        Action<HttpProcessData> uploadProcessCallback = null, CancellationToken? cancellationToken = null);
   
    //完成上传
    public async Task<CompleteMultipartUploadResult> CompleteMultipartUpload(CompleteMultipartUploadModel completeMultipartUploadModel);

   //删除多块上传任务
    public async Task DeleteMultipartUpload(MultiUploadRequestData multiUploadObject);
 
   //获得分块上传的结果
   public async Task<ListPartsResult> ListMultiUploadParts(string buketName, string key, string uploadId);
    
    //获得Bucket所有分块上传的结果
    public async Task<ListMultipartUploadsResult> ListMultipartUploads(string bucketName);

五 主要API说明及用例(其他参照原先SDK说明和OSSAPI的说明)

public async Task GetObject(GetObjectRequest getObjectRequest, Action downloadProcessCallback = null, CancellationToken? cancellationToken = null) 用途:下载Objet 用例:这段代码在调用getOject()时,下载40%的时候,取消任务。

CancellationTokenSource tokenSource = new CancellationTokenSource();
void callback(HttpProcessData processPercent)
{
    if (processPercent.ProgressPercentage == 40)
    {
         	tokenSource.Cancel();
    }
}

 void getObject()
 {
     FileStream fs = null;
     Stream stream = null;
     try
     {   
         OssObject result = await temp.GetObject("devdoc", "c# 5.0.pdf", callback);
         stream = obj.Content;
         fs = new FileStream(fileName, FileMode.OpenOrCreate);
         await stream.CopyToAsync(fs);
         fs.Position = 0;
         fs.Flush();
     }
     catch (Exception ex)
     {
          throw ex;
     }
     finally
     {
         if(fs != null)
            fs.Close();
 
         if (stream != null)
             stream.Close();
     }
 
 }

2.多块上传示例

这段代码调用MultipartUploadSample,实现对文件c# 5.0.pdf 分2块上传 static int ReadChunk(Stream stream, byte[] chunk) { int index = 0; while (index < chunk.Length) { int bytesRead = stream.Read(chunk, index, chunk.Length - index); if (bytesRead == 0) { break; } index += bytesRead; } return index; }

    static async void MultipartUploadSample ()
    {
        try
        {
            OssClient client = new OssClient("bm9crcnr0rtnuw8bnrfvq7w8", "RbtJoExTnA8vYLynUfDh7Ior+oM=");
            string uploadId = await client.MultipartUploadInitiate("devdoc", "c# 5.0.pdf");

            FileStream fs = new FileStream(@"c# 5.0.pdf", FileMode.Open);

            byte[] buffer = new byte[6291456];

            ReadChunk(fs, buffer);

            MemoryStream ms = new MemoryStream(buffer);

            MultiUploadRequestData arg = new MultiUploadRequestData() { Bucket = "devdoc", Key = "c# 5.0.pdf", Content = ms, PartNumber = "1", UploadId = result };
            MultipartUploadResult result1 = await client.MultipartUpload(arg, callback);

            //ListMultipartUploadsResult listMultipart = await client.ListMultipartUploads("devdoc");

            //client.DeleteMultipartUpload(arg);

           fs.Position = 6291456;
           arg = new MultiUploadRequestData() { Bucket = "devdoc", Key = "c# 5.0.pdf", Content = fs, PartNumber = "2", UploadId = uploadId };
           MultipartUploadResult result2 = await client.MultipartUpload(arg);

           ListPartsResult parts = await client.ListMultiUploadParts("devdoc", "c# 5.0.pdf", uploadId);


           CompleteMultipartUploadModel model = new CompleteMultipartUploadModel();

           model.Parts = new List<MultipartUploadPartModel>();
           model.Parts.Add(new MultipartUploadPartModel(1, result1.ETag));
           model.Parts.Add(new MultipartUploadPartModel(2, result2.ETag));
           model.Bucket = "devdoc";
           model.Key = "c# 5.0.pdf";
           model.UploadId = uploadId;


           await client.CompleteMultipartUpload(model);

           fs.Dispose();

        }
        catch (AggregateException ex)
        {
            throw ex;

        }
    }

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published