/// <summary> /// 删除远端文件 /// </summary> /// <param name="filename">按文件名前缀保留搜索结果</param> /// <returns></returns> private Boolean DelFile(string filename) { BucketManager bm = new BucketManager(mac); string marker = ""; // 首次请求时marker必须为空 string delimiter = null; // 目录分割字符(比如"/") int limit = 100; // 最大值1000 // 返回结果存储在items中 List <FileDesc> items = new List <FileDesc>(); // 由于limit限制,可能需要执行多次操作 // 返回值中Marker字段若非空,则表示文件数超过了limit ListFilesResult list = bm.listFiles(Utils.bucket, filename, marker, limit, delimiter); List <FileDesc> fileList = list.Items; if (fileList != null) { foreach (FileDesc f in fileList) { var result = bm.delete(Utils.bucket, f.Key); if (result.ResponseInfo.StatusCode == 200) { return(true); } else { return(false); } } } return(true); }
/// <summary> /// /// 获取空间文件列表 /// 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中的文件 /// /// </summary> public ListFilesResult listFiles(string bucket, string prefix, string marker, int limit, string delimiter) { ListFilesResult result = null; StringBuilder sb = new StringBuilder("bucket=" + bucket); if (!string.IsNullOrEmpty(marker)) { sb.Append("&marker=" + marker); } if (!string.IsNullOrEmpty(prefix)) { sb.Append("&prefix=" + prefix); } if (!string.IsNullOrEmpty(delimiter)) { sb.Append("&delimiter=" + delimiter); } if (limit > 1000 || limit < 1) { sb.Append("&limit=1000"); } else { sb.Append("&limit=" + limit); } string listFilesUrl = Config.ZONE.RsfHost + "/list?" + sb.ToString(); string accessToken = Auth.createManageToken(listFilesUrl, null, mac); Dictionary <string, string> listFilesHeaders = new Dictionary <string, string>(); listFilesHeaders.Add("Authorization", accessToken); CompletionHandler listFilesCompletionHandler = new CompletionHandler(delegate(ResponseInfo respInfo, string response) { result = new ListFilesResult(); result.Response = response; result.ResponseInfo = respInfo; if (respInfo.isOk()) { ListFilesResponse resp = JsonConvert.DeserializeObject <ListFilesResponse>(response); result.Marker = resp.Marker; result.Items = resp.Items; result.CommonPrefixes = resp.CommonPrefixes; } }); this.mHttpManager.postForm(listFilesUrl, listFilesHeaders, null, listFilesCompletionHandler); return(result); }
/// <summary> /// 获取空间文件列表 /// /// 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中的文件 /// /// </summary> public static void listFiles() { Mac mac = new Mac(Settings.AccessKey, Settings.SecretKey); string bucket = "BUCKET"; string marker = ""; // 首次请求时marker必须为空 string prefix = null; // 按文件名前缀保留搜索结果 string delimiter = null; // 目录分割字符(比如"/") int limit = 100; // 最大值1000 BucketManager bm = new BucketManager(mac); List <FileDesc> items = new List <FileDesc>(); List <string> commonPrefixes = new List <string>(); do { ListFilesResult result = bm.listFiles(bucket, prefix, marker, limit, delimiter); marker = result.Marker; if (result.Items != null) { items.AddRange(result.Items); } if (result.CommonPrefixes != null) { commonPrefixes.AddRange(result.CommonPrefixes); } } while (!string.IsNullOrEmpty(marker)); foreach (string cp in commonPrefixes) { System.Console.WriteLine(cp); } foreach (var item in items) { System.Console.WriteLine(item.Key); } }