Skip to content

Commit ab4ba79

Browse files
committed
增加listFiles支持,更新文档及示例代码
1 parent dbffe9a commit ab4ba79

File tree

6 files changed

+103
-12
lines changed

6 files changed

+103
-12
lines changed

Docs/imgs/BucketManager.png

30.5 KB
Loading

README.md

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,25 @@ C# SDK引用了第三方的开源项目[Json.NET](http://www.newtonsoft.com/json
111111

112112
#####简单处理
113113

114-
支持stat、copy、move、delete等,具体可参阅BucketManager模块说明。
114+
支持stat、copy、move、delete,listFiles等,具体可参阅BucketManager模块说明。
115+
116+
######关于获取空间文件列表(listFiles)的说明:
117+
118+
METHOD: listFiles(bucket, prefix, marker, limit, delimiter)
119+
-----------------------------------------------------------------------
120+
bucket: 目标空间名称
121+
prefix: 返回指定文件名前缀的文件列表(prefix可设为null)
122+
marker: 考虑到设置limit后返回的文件列表可能不全(需要重复执行listFiles操作)
123+
执行listFiles操作时使用marker标记来追加新的结果
124+
特别注意首次执行listFiles操作时marker为null
125+
limit: 每次返回结果所包含的文件总数限制(limit<=1000,建议值100)
126+
delimiter: 分隔符,比如-或者/等等,可以模拟作为目录结构(参考下述示例)
127+
假设指定空间中有2个文件 fakepath/1.txt fakepath/2.txt
128+
现设置delimiter=/ 得到结果items =[],commonPrefixes = [fakepath/]
129+
调整prefix=fakepath/ delimiter=null 得到所需结果items=[1.txt,2.txt]
130+
于是可以在本地先创建一个目录fakepath,然后在该目录下写入items中的文件
131+
132+
115133

116134
#####批量处理
117135

examples/App.cs

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -24,34 +24,37 @@ static void Main(string[] args)
2424
//ResumableUpload.uploadBigFile();
2525

2626
// 空间文件stat
27-
//BucketFileManagemt.stat();
27+
//BucketFileManagement.stat();
2828

2929
// 删除空间文件
30-
//BucketFileManagemt.delete();
30+
//BucketFileManagement.delete();
3131

3232
// 复制空间文件
33-
//BucketFileManagemt.copy();
33+
//BucketFileManagement.copy();
3434

3535
// 移动空间文件
36-
//BucketFileManagemt.move();
36+
//BucketFileManagement.move();
3737

3838
// 修改空间文件的mimeType
39-
//BucketFileManagemt.chgm();
39+
//BucketFileManagement.chgm();
4040

4141
// 批量操作
42-
//BucketFileManagemt.batch();
42+
//BucketFileManagement.batch();
4343

4444
// 取回文件并保存到空间
45-
//BucketFileManagemt.fetch();
45+
//BucketFileManagement.fetch();
4646

4747
// 镜像资源更新
48-
//BucketFileManagemt.prefetch();
48+
//BucketFileManagement.prefetch();
4949

5050
// 列举所有bucket
51-
//BucketFileManagemt.buckets();
51+
//BucketFileManagement.buckets();
5252

5353
// 获取指定bucket的域名
54-
//BucketFileManagemt.domains();
54+
//BucketFileManagement.domains();
55+
56+
// 获取空间文件列表
57+
// BucketFileManagement.listFiles();
5558

5659
// 文件处理+保存处理结果
5760
//PfopWithPipeline.pfopAndSave();

examples/BucketFileManagemt.cs renamed to examples/BucketFileManagement.cs

Lines changed: 67 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,14 @@
22
using Qiniu.Storage;
33
using Qiniu.Storage.Model;
44
using Qiniu.Http;
5+
using System.Collections.Generic;
56

67
namespace QiniuDemo
78
{
89
/// <summary>
910
/// 空间及空间文件管理
1011
/// </summary>
11-
public class BucketFileManagemt
12+
public class BucketFileManagement
1213
{
1314

1415
/// <summary>
@@ -173,5 +174,70 @@ public static void domains()
173174
System.Console.WriteLine(domain);
174175
}
175176
}
177+
178+
/// <summary>
179+
/// 获取空间文件列表
180+
///
181+
/// BucketManager.listFiles(bucket, prefix, marker, limit, delimiter)
182+
///
183+
/// bucket: 目标空间名称
184+
///
185+
/// prefix: 返回指定文件名前缀的文件列表(prefix可设为null)
186+
///
187+
/// marker: 考虑到设置limit后返回的文件列表可能不全(需要重复执行listFiles操作)
188+
/// 执行listFiles操作时使用marker标记来追加新的结果
189+
/// 特别注意首次执行listFiles操作时marker为null
190+
///
191+
/// limit: 每次返回结果所包含的文件总数限制(limit<=1000,建议值100)
192+
///
193+
/// delimiter: 分隔符,比如-或者/等等,可以模拟作为目录结构(参考下述示例)
194+
/// 假设指定空间中有2个文件 fakepath/1.txt fakepath/2.txt
195+
/// 现设置分隔符delimiter = / 得到返回结果items =[],commonPrefixes = [fakepath/]
196+
/// 然后调整prefix = fakepath/ delimiter = null 得到所需结果items = [1.txt,2.txt]
197+
/// 于是可以在本地先创建一个目录fakepath,然后在该目录下写入items中的文件
198+
///
199+
/// </summary>
200+
public static void listFiles()
201+
{
202+
Mac mac = new Mac(Settings.AccessKey, Settings.SecretKey);
203+
204+
string bucket = "BUCKET";
205+
string marker = ""; // 首次请求时marker必须为空
206+
string prefix = null; // 按文件名前缀保留搜索结果
207+
string delimiter = null; // 目录分割字符(比如"/")
208+
int limit = 100; // 最大值1000
209+
210+
BucketManager bm = new BucketManager(mac);
211+
List<FileDesc> items = new List<FileDesc>();
212+
List<string> commonPrefixes = new List<string>();
213+
214+
do
215+
{
216+
ListFilesResult result = bm.listFiles(bucket, prefix, marker, limit, delimiter);
217+
218+
marker = result.Marker;
219+
220+
if (result.Items != null)
221+
{
222+
items.AddRange(result.Items);
223+
}
224+
225+
if (result.CommonPrefixes != null)
226+
{
227+
commonPrefixes.AddRange(result.CommonPrefixes);
228+
}
229+
230+
} while (!string.IsNullOrEmpty(marker));
231+
232+
foreach (string cp in commonPrefixes)
233+
{
234+
System.Console.WriteLine(cp);
235+
}
236+
237+
foreach(var item in items)
238+
{
239+
System.Console.WriteLine(item.Key);
240+
}
241+
}
176242
}
177243
}

examples/CodeMap.png

3.83 KB
Loading

examples/packages.config

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<packages>
3+
<package id="Newtonsoft.Json" version="9.0.1" targetFramework="net40" />
4+
</packages>

0 commit comments

Comments
 (0)