Skip to content

Commit fcb994c

Browse files
committed
更新README文档
1 parent fb7c589 commit fcb994c

File tree

1 file changed

+175
-37
lines changed

1 file changed

+175
-37
lines changed

README.md

Lines changed: 175 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,8 @@ C# SDK引用了第三方的开源项目[Json.NET](http://www.newtonsoft.com/json
4646
* [QSunSync](https://github.com/qiniu/QSunSync)
4747
* [QiniulaLab](https://github.com/qiniu/qiniulab)
4848

49+
您也可以参考官方文档 [C# SDK 使用指南](http://developer.qiniu.com/code/v7/sdk/csharp.html)
50+
4951
####上传文件
5052

5153
#####上传流程
@@ -54,33 +56,132 @@ C# SDK引用了第三方的开源项目[Json.NET](http://www.newtonsoft.com/json
5456

5557
#####普通上传
5658

57-
使用UploadManager,以下代码示意了如何使用UploadManager来上传一个本地文件
58-
59-
// Let's begin
60-
UploadManager mgr = new UploadManager();
61-
62-
// PutPolicy
63-
PutPolicy putPolicy = new PutPolicy();
64-
putPolicy.Scope = Settings.Bucket;
65-
// 上传策略有效时间(建议时间3600秒)
66-
putPolicy.SetExpires(3600);
67-
// 过期(上传完毕1天后)自动删除
68-
putPolicy.DeleteAfterDays = 1;
69-
70-
// UploadToken
71-
Mac mac = new Mac(Settings.AccessKey, Settings.SecretKey);
72-
string token = Auth.createUploadToken(putPolicy, mac);
73-
74-
string saveKey = "test_UploadManagerUploadFile.png";
75-
string localFile = "F:\\test.png";
76-
77-
// Do it!
78-
mgr.uploadFile(localFile, saveKey, token, null, null);
59+
推荐使用UploadManager,以下代码示意了如何使用UploadManager来上传一个本地文件
60+
61+
using System;
62+
using Qiniu.Util;
63+
using Qiniu.Storage;
64+
using System.IO;
65+
66+
namespace ConsoleDemo
67+
{
68+
class SimpleUploadDemo
69+
{
70+
public static void Main(string[] args)
71+
{
72+
string AK = "ACCESS_KEY";
73+
string SK = "SECRET_KEY";
74+
// 目标空间名
75+
string bucket = "TARGET_BUCKET";
76+
// 目标文件名
77+
string saveKey = "SAVE_KEY";
78+
// 本地文件
79+
string localFile = "LOCAL_FILE";
80+
81+
// 上传策略
82+
PutPolicy putPolicy = new PutPolicy();
83+
// 设置要上传的目标空间
84+
putPolicy.Scope = bucket;
85+
// 上传策略的过期时间(单位:秒)
86+
putPolicy.SetExpires(3600);
87+
// 文件上传完毕后,在多少天后自动被删除
88+
putPolicy.DeleteAfterDays = 1;
89+
90+
Mac mac = new Mac(AK,SK); // Use AK & SK here
91+
// 生成上传凭证
92+
string uploadToken = Auth.createUploadToken(putPolicy, mac);
93+
94+
UploadOptions uploadOptions = null;
95+
96+
// 上传完毕事件处理
97+
UpCompletionHandler uploadCompleted = new UpCompletionHandler(OnUploadCompleted);
98+
99+
// 方式1:使用UploadManager
100+
//默认设置 Qiniu.Common.Config.PUT_THRESHOLD = 512*1024;
101+
//可以适当修改,UploadManager会根据这个阈值自动选择是否使用分片(Resumable)上传
102+
UploadManager um = new UploadManager();
103+
um.uploadFile(localFile, saveKey, token, uploadOptions, uploadCompleted);
104+
105+
// 方式2:使用FormManager
106+
//FormUploader fm = new FormUploader();
107+
//fm.uploadFile(localFile, saveKey, token, uploadOptions, uploadCompleted);
108+
109+
Console.ReadKey();
110+
}
111+
112+
private static void OnUploadCompleted(string key, ResponseInfo respInfo, string respJson)
113+
{
114+
// respInfo.StatusCode
115+
// respJson是返回的json消息,示例: { "key":"FILE","hash":"HASH","fsize":FILE_SIZE }
116+
}
117+
}
118+
}
79119

80120

81121
#####断点续上传
82122

83-
使用ResumeUploader,可参考examples/ResumableUpload.cs代码
123+
使用ResumeUploader,可参考examples/ResumableUpload.cs代码。
124+
125+
using System;
126+
using Qiniu.Util;
127+
using Qiniu.Storage;
128+
using System.IO;
129+
130+
namespace ConsoleDemo
131+
{
132+
class ResumableUploadDemo
133+
{
134+
public static void Main(string[] args)
135+
{
136+
string AK = "ACCESS_KEY";
137+
string SK = "SECRET_KEY";
138+
string bucket = "TARGET_BUCKET";
139+
string saveKey = "SAVE_KEY";
140+
string localFile = "LOCAL_FILE";
141+
// 上传进度记录保存的目录
142+
string recordPath = "RECORD_PATH";
143+
// 上传进度保存为文件
144+
string recordFile = "RECORD_FILE";
145+
146+
UploadOptions uploadOptions = new UploadOptions(
147+
null, // ExtraParams
148+
null, // MimeType
149+
false, // CheckCrc32
150+
new UpProgressHandler(OnUploadProgressChanged), // 上传进度
151+
null // CancelSignal
152+
);
153+
154+
UpCompletionHandler uploadCompleted = new UpCompletionHandler(OnUploadCompleted); // 上传完毕
155+
156+
// 上传时会将当前进度记录写到文件,下次可以“断点续传”
157+
ResumeRecorder rr = new ResumeRecorder(recordPath);
158+
// 开始上传
159+
ResumeUploader ru = new ResumeUploader(
160+
rr, // 续传记录
161+
recordFile, // 续传记录文件
162+
localFile, // 待上传的本地文件
163+
saveKey, // 要保存的文件名
164+
token, // 上传凭证
165+
uploadOptions, // 上传选项(其中包含进度处理),可为null
166+
uploadCompleted // 上传完毕事件处理
167+
);
168+
169+
ru.uploadFile();
170+
Console.ReadKey();
171+
}
172+
173+
private static void OnUploadProgressChanged(string key,double percent)
174+
{
175+
// percent = [0(开始)~1.0(完成)]
176+
}
177+
178+
private static void OnUploadCompleted(string key,ResponseInfo respInfo,string respJson)
179+
{
180+
// respInfo.StatusCode
181+
// respJson是返回的json消息,示例: { "key":"FILE","hash":"HASH","fsize":FILE_SIZE }
182+
}
183+
}
184+
}
84185

85186
####文件下载
86187

@@ -114,22 +215,59 @@ C# SDK引用了第三方的开源项目[Json.NET](http://www.newtonsoft.com/json
114215
支持stat、copy、move、delete,listFiles等,具体可参阅BucketManager模块说明。
115216

116217
######关于获取空间文件列表(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中的文件
131218

219+
在BucketManager类中提供了listFiles方法`listFiles(bucket, prefix, marker, limit, delimiter)`.
220+
221+
该方法返回值中,有以下3个字段需要关注:
222+
223+
| 字段 | 含义 |
224+
|-----|-----|
225+
| Marker | 请参阅下述的`marker`参数 |
226+
| Items | 返回的结果,其中包括文件名、hash、大小等信息 |
227+
| CommonPrefixes | 请参阅下述的`delimiter``prefix`参数 |
132228

229+
函数参数说明如下:
230+
231+
| 参数 | 含义 |
232+
|--------|--------|
233+
|bucket|目标空间名称|
234+
|prefix|返回指定文件名前缀的文件列表(prefix可设为null)|
235+
|marker|考虑到设置limit后返回的文件列表可能不全(需要重复执行listFiles操作) 执行listFiles操作时使用marker标记来追加新的结果。**特别注意**首次执行listFiles操作时marker为null|
236+
|limit|每次返回结果所包含的文件总数限制(limit<=1000,*建议值100*)|
237+
|delimiter|分隔符,比如-或者/等等,可以模拟作为目录结构(参考下述示例)。假设指定空间中有2个文件 fakepath/1.txt fakepath/2.txt 现设置delimiter=/ 得到结果items =[],commonPrefixes = [fakepath/] 调整prefix=fakepath/ delimiter=null 得到所需结果items=[1.txt,2.txt] 于是可以在本地先创建一个目录fakepath,然后在该目录下写入items中的文件|
238+
239+
240+
以下是一个简单的示例:
241+
242+
// AK = "ACCESS_KEY"
243+
// SK = "SECRET_KEY"
244+
Mac mac = new Mac(AK, SK);
245+
BucketManager bm = new BucketManager(mac);
246+
247+
string bucket = "BUCKET"; // 目标空间
248+
string marker = ""; // 首次请求时marker必须为空
249+
string prefix = null; // 按文件名前缀保留搜索结果
250+
string delimiter = null; // 目录分割字符(比如"/")
251+
int limit = 100; // 最大值1000
252+
253+
// 返回结果存储在items中
254+
List<FileDesc> items = new List<FileDesc>();
255+
256+
// 由于limit限制,可能需要执行多次操作
257+
// 返回值中Marker字段若非空,则表示文件数超过了limit
258+
do
259+
{
260+
var result = bm.listFiles(bucket, prefix, marker, limit, delimiter);
261+
marker = result.Marker;
262+
if (result.Items != null)
263+
{
264+
items.AddRange(result.Items);
265+
}
266+
} while (!string.IsNullOrEmpty(marker));
267+
268+
// 在这里处理文件列表items
269+
270+
完整示例及其它更多代码可以参考SDK的[examples目录](https://github.com/qiniu/csharp-sdk/tree/master/examples)
133271

134272
#####批量处理
135273

0 commit comments

Comments
 (0)