引用官方Dll文件和Newtonsoft.Json Dll
然后下面给出基本的操作方法(https://developer.qiniu.com/kodo/sdk/1237/csharp)
using System; using Qiniu.Util; using Qiniu.Http; using System.Configuration; using Qiniu.Common; using Qiniu.IO.Model; using Qiniu.IO; using Qiniu.RS; using Qiniu.RS.Model; using MuYun.Controllers; namespace MuYun.MuTools { public class QiNiuHelper { BaseController bs = new BaseController(); #region 七牛配置文件 //配置密钥 public static string AK = ConfigurationManager.AppSettings["AK"]; public static string SK = ConfigurationManager.AppSettings["SK"]; #endregion Mac mac = new Mac(AK, SK); #region 七牛文件上传 /// /// 简单上传-上传小文件 /// ///目标空间名 ///目标文件名 ///本地文件 public string SimpleUpload(string bucket, string saveKey, string localFile) { // 生成(上传)凭证时需要使用此Mac // 这个示例单独使用了一个Settings类,其中包含AccessKey和SecretKey // 实际应用中,请自行设置您的AccessKey和SecretKey //Mac mac = new Mac(AK, SK); Config.AutoZone(AK, bucket, false); // 上传策略,参见 // https://developer.qiniu.com/kodo/manual/put-policy PutPolicy putPolicy = new PutPolicy(); // 如果需要设置为"覆盖"上传(如果云端已有同名文件则覆盖),请使用 SCOPE = "BUCKET:KEY" // putPolicy.Scope = bucket + ":" + saveKey; putPolicy.Scope = bucket; // 上传策略有效期(对应于生成的凭证的有效期) putPolicy.SetExpires(5256000);//10年 // 上传到云端多少天后自动删除该文件,如果不设置(即保持默认默认)则不删除 //putPolicy.DeleteAfterDays = 1; // 生成上传凭证,参见 // https://developer.qiniu.com/kodo/manual/upload-token string jstr = putPolicy.ToJsonString(); string token = Auth.CreateUploadToken(mac, jstr); UploadManager um = new UploadManager(); HttpResult result = um.UploadFile(localFile, saveKey, token); return bs.ToJson(result); } /// /// 断点续上传 /// public void ResumableUpload(string bucket, string saveKey, string localFile) { // 这个示例单独使用了一个Settings类,其中包含AccessKey和SecretKey // 实际应用中,请自行设置您的AccessKey和SecretKey //Mac mac = new Mac(AK, SK); // 断点记录文件,可以不用设置,让SDK自动生成,如果出现续上传的情况,SDK会尝试从该文件载入断点记录 // 对于不同的上传任务,请使用不同的recordFile string recordFile = "D:\\QFL\\resume.12345"; PutPolicy putPolicy = new PutPolicy(); putPolicy.Scope = bucket; putPolicy.SetExpires(3600); string token = Auth.CreateUploadToken(mac, putPolicy.ToJsonString()); // 包含两个参数,并且都有默认值 // 参数1(bool): uploadFromCDN是否从CDN加速上传,默认否 // 参数2(enum): chunkUnit上传分片大小,可选值128KB,256KB,512KB,1024KB,2048KB,4096KB ResumableUploader ru = new ResumableUploader(false, ChunkUnit.U256K); // ResumableUploader.UploadFile有多种形式,您可以根据需要来选择 // // 最简模式,使用默认recordFile和默认uploadProgressHandler //UploadFile(localFile,saveKey,token) // // 基本模式,使用默认uploadProgressHandler // UploadFile(localFile,saveKey,token,recordFile) // // 一般模式,使用自定义进度处理(可以监视上传进度) // UploadFile(localFile,saveKey,token,recordFile,uploadProgressHandler) // // 高级模式,包含上传控制(可控制暂停/继续 或者强制终止) // UploadFile(localFile,saveKey,token,recordFile,uploadProgressHandler,uploadController) // // 支持自定义参数 //var extra = new System.Collections.Generic.Dictionary<string, string>(); //extra.Add("FileType", "UploadFromLocal"); //extra.Add("YourKey", "YourValue"); //uploadFile(...,extra,...) //最大尝试次数(有效值1~20),在上传过程中(如mkblk或者bput操作)如果发生错误,它将自动重试,如果没有错误则无需重试 int maxTry = 10; // 使用默认进度处理,使用自定义上传控制 UploadProgressHandler upph = new UploadProgressHandler(ResumableUploader.DefaultUploadProgressHandler); UploadController upctl = new UploadController(uploadControl); HttpResult result = ru.UploadFile(localFile, saveKey, token, recordFile, maxTry, upph, upctl); Console.WriteLine(result); } public HttpResult ResumableUpload(System.IO.Stream stream, string bucket, string saveKey) { // 断点记录文件,可以不用设置,让SDK自动生成,如果出现续上传的情况,SDK会尝试从该文件载入断点记录 // 对于不同的上传任务,请使用不同的recordFile Config.AutoZone(AK, bucket, false); PutPolicy putPolicy = new PutPolicy(); putPolicy.Scope = bucket; putPolicy.SetExpires(3600); string token = Auth.CreateUploadToken(mac, putPolicy.ToJsonString()); // 包含两个参数,并且都有默认值 // 参数1(bool): uploadFromCDN是否从CDN加速上传,默认否 // 参数2(enum): chunkUnit上传分片大小,可选值128KB,256KB,512KB,1024KB,2048KB,4096KB ResumableUploader ru = new ResumableUploader(false, ChunkUnit.U256K); // 使用默认进度处理,使用自定义上传控制 StreamProgressHandler spph = new StreamProgressHandler(ResumableUploader.DefaultStreamProgressHandler); UploadController upctl = new UploadController(uploadControl); HttpResult result = ru.UploadStream(stream, saveKey, token, spph); return result; //return bs.ToJson(result); } // 内部变量,仅作演示 private static bool paused = false; /// /// 上传控制 /// /// private static UPTS uploadControl() { // 这个函数只是作为一个演示,实际当中请根据需要来设置 // 这个演示的实际效果是“走走停停”,也就是停一下又继续,如此重复直至上传结束 paused = !paused; if (paused) { return UPTS.Suspended; } else { return UPTS.Activated; } } #endregion #region 七牛文件下载 /// /// 七牛文件下载 /// ///需要下载的文件名 ///bucket的cdn域名 "D:\\QFL\\saved-1.jpg" ///下载到本地的路径 public string SimpleDownLoad(string FileName, string BucketUrl) { // 这个示例单独使用了一个Settings类,其中包含AccessKey和SecretKey // 实际应用中,请自行设置您的AccessKey和SecretKey Mac mac = new Mac(AK, SK); string rawUrl = BucketUrl + "/" + FileName; // 设置下载链接有效期3600秒 int expireInSeconds = 3600; string accUrl = DownloadManager.CreateSignedUrl(mac, rawUrl, expireInSeconds); //DownloadManager.Download(rawUrl,""); // 接下来可以使用accUrl来下载文件 //HttpResult result = DownloadManager.Download(accUrl, saveFile); return accUrl; } #endregion #region 七牛文件移动/重命名 /// /// 文件移动 /// ///原Bucket ///原文件名 ///新Bucket ///新文件名 public bool MoveFile(string srcBucket, string srcKey, string dstBucket, string dstKey) { Mac mac = new Mac(AK, SK); BucketManager bm = new BucketManager(mac); HttpResult hr= bm.Move(srcBucket, srcKey, dstBucket, dstKey); if (hr.Code==200) { return true; } else { return false; } } #endregion #region 七牛文件复制 /// /// 复制文件 /// ///原Bucket ///原文件名 ///新Bucket ///新文件名 public bool CopyFile(string srcBucket, string srcKey, string dstBucket, string dstKey) { //Mac mac = new Mac(AK, SK); BucketManager bm = new BucketManager(mac); HttpResult hr = bm.Copy(srcBucket, srcKey, dstBucket, dstKey); if (hr.Code == 200) { return true; } else { return false; } } #endregion #region 七牛文件删除 /// /// 删除文件 /// //////public void DeleteFile(string bucket, string key) { //Mac mac = new Mac(AK, SK); BucketManager bm = new BucketManager(mac); HttpResult result = bm.Delete(bucket, key); } #endregion #region 七牛获取空间文件列表 /// /// 获取空间文件列表 /// /// BucketManager.listFiles(bucket, prefix, marker, limit, delimiter) /// /// bucket: 目标空间名称 /// /// prefix: 返回指定文件名前缀的文件列表(prefix可设为null) /// /// marker: 考虑到设置limit后返回的文件列表可能不全(需要重复执行listFiles操作) /// 执行listFiles操作时使用marker标记来追加新的结果 /// 特别注意首次执行listFiles操作时marker为null /// /// limit: 每次返回结果所包含的文件总数限制(limit<=1000,建议值100) /// /// delimiter: 分隔符,比如-或者/等等,可以模拟作为目录结构(参考下述示例) /// 假设指定空间中有2个文件 fakepath/1.txt fakepath/2.txt /// 现设置分隔符delimiter = / 得到返回结果items =[],commonPrefixes = [fakepath/] /// 然后调整prefix = fakepath/ delimiter = null 得到所需结果items = [1.txt,2.txt] /// 于是可以在本地先创建一个目录fakepath,然后在该目录下写入items中的文件 /// /// public void GetFileList() { // 这个示例单独使用了一个Settings类,其中包含AccessKey和SecretKey // 实际应用中,请自行设置您的AccessKey和SecretKey //Mac mac = new Mac(Settings.AccessKey, Settings.SecretKey); string bucket = "test"; string marker = ""; // 首次请求时marker必须为空 string prefix = null; // 按文件名前缀保留搜索结果 string delimiter = null; // 目录分割字符(比如"/") int limit = 100; // 单次列举数量限制(最大值为1000) BucketManager bm = new BucketManager(mac); //List items = new List(); //List commonPrefixes = new List(); do { ListResult result = bm.ListFiles(bucket, prefix, marker, limit, delimiter); Console.WriteLine(result); marker = result.Result.Marker; //if (result.Result.Items != null) //{ // items.AddRange(result.Result.Items); //} //if (result.Result.CommonPrefixes != null) //{ // commonPrefixes.AddRange(result.Result.CommonPrefixes); //} } while (!string.IsNullOrEmpty(marker)); //foreach (string cp in commonPrefixes) //{ // Console.WriteLine(cp); //} //foreach(var item in items) //{ // Console.WriteLine(item.Key); //} } #endregion } }