此SDK实现了七牛云存储的核心部分,即文件上传,目的是简化文件上传并提供更加便捷的编程接口,从更高层面进行了抽象,而非官方SDK那样,仅是对API的一套封装。git
项目地址: https://github.com/icattlecoder/qiniu-csharp-sdkgithub
初始化工做包括对七牛的API Keys的赋值,如:编程
qiniu.Config.ACCESS_KEY = "IT9iP3J9wdXXYsT1p8ns0gWD-CQOdLvIQuyE0FOK"; qiniu.Config.SECRET_KEY = "zUCzekBtEqTZ4-WJPCGlBrr2PeyYxsYn98LPaivM";
QiniuFile qfile = new QiniuFile ("<input your bucket name>", "<input qiniu file key>", "<local disk file path>"); qfile.Upload();
一个QiniuFile对象表示一个七牛云空间的文件,初始化QiniuFile提供如下三个参数:
- bucketName
,七牛云空间名称
- key
,七牛文件key
- localfile
,本地文件。该参数为可选,若是要上传本地的文件至七牛云空间,则须要指定此参数的值。七牛云存储
注意上传为异步操做,上传的结果由事件通知。异步
共包括五个事件spa
事件名称 | 说明 |
---|---|
UploadCompleted; | 上传完成 |
UploadFailed; | 上传失败 |
UploadProgressChanged; | 上传进度 |
UploadBlockCompleted; | 上传块完成 |
UploadBlockFailed; | 上传块失败 |
前三个事件比较容易理解,后两个事件是根据七牛的大文件上传机制衍生出来的,合理利用这两个事件能够完成大文件分块上传结果持久化,从而实现续传。code
成功上传一个文件后,结果经过事件uploadCompleted
获取获得,包括文件的Hash
和Key
以及从七牛云存储返回的原始字符串(主要考虑到上传凭证中指定了自定义的returnBody)。对象
类QiniuResumbleUploadEx
可用于续传,见示例。接口
简单的实现了文件的基本信息获取及删除操做,分别为Stat
和Delete
事件
using System; using System.Collections; using System.Collections.Generic; using qiniu; using System.Threading; namespace demo { class MainClass { public static void Main (string[] args) { // 初始化qiniu配置,主要是API Keys qiniu.Config.ACCESS_KEY = "IT9iP3J9wdXXYsT1p8ns0gWD-CQOdLvIQuyE0FOi"; qiniu.Config.SECRET_KEY = "zUCzekBtEqTZ4-WJPCGlBrr2PeyYxsYn98LPaivM"; /********************************************************************** 能够用下面的方法从配置文件中初始化 qiniu.Config.InitFromAppConfig (); **********************************************************************/ string localfile = "/Users/icattlecoder/Movies/tzd.rmvb"; string bucket = "icattlecoder"; string qiniukey = "tzd.rmvb"; //====================================================================== { QiniuFile qfile = new QiniuFile (bucket, qiniukey, localfile); ResumbleUploadEx puttedCtx = new ResumbleUploadEx (localfile); //续传 ManualResetEvent done = new ManualResetEvent (false); qfile.UploadCompleted += (sender, e) => { Console.WriteLine (e.key); Console.WriteLine (e.Hash); done.Set (); }; qfile.UploadFailed += (sender, e) => { Console.WriteLine (e.Error.ToString ()); puttedCtx.Save(); done.Set (); }; qfile.UploadProgressChanged += (sender, e) => { int percentage = (int)(100 * e.BytesSent / e.TotalBytes); Console.Write (percentage); }; qfile.UploadBlockCompleted += (sender, e) => { //上传结果持久化 puttedCtx.Add(e.Index,e.Ctx); puttedCtx.Save(); }; qfile.UploadBlockFailed += (sender, e) => { // }; //上传为异步操做 //上传本地文件到七牛云存储 qfile.Upload (); //若是要续传,调用下面的方法 //qfile.Upload (puttedCtx.PuttedCtx); done.WaitOne (); } //====================================================================== { try { QiniuFile qfile = new QiniuFile (bucket, qiniukey); QiniuFileInfo finfo = qfile.Stat (); if (finfo != null) { qfile.Move("cloudcomment","movetest"); //删除七牛云空间的文件 //qfile.Delete (); } } catch (QiniuWebException e) { Console.WriteLine (e.Error.HttpCode); Console.WriteLine (e.Error.ToString ()); } } } } }