99
1010## 文件目录说明
1111
12- * docs文件夹: 开发文档生成文件
13- * ufile文件夹: SDK的具体实现
14- * setup.py: package安装文件
15- * test_ufile文件夹: 测试文件以及demo示例
12+ * docs文件夹: 开发文档生成文件
13+ * ufile文件夹: SDK的具体实现
14+ * setup.py: package安装文件
15+ * test_ufile文件夹: 测试文件
16+ * examples: 示例代码
1617
17- ## 使用方法
18+ ## 安装
19+
20+ ### 本地安装
21+
22+ ``` bash
23+ $ git clone https://github.com/ucloud/ufile-sdk-python.git
24+ $ git checkout < tag/branch>
25+ $ cd ufile-sdk-python
26+ $ python setup.py install
27+ ```
28+
29+ ### 使用 pip 安装
30+
31+ ``` bash
32+ $ pip install ufile
33+ # 如果你要使用 pre-release 版本
34+ $ pip install --pre ufile
35+ ```
1836
19- > ` python setup.py install ` (本地安装)
20- >
21- > ` pip install ufile ` (pip安装,须首先安装pip)
22-
2337** 注意:在国内的 pip 源会由于网络问题无法更新,建议加上国内的 python 源。**
2438具体请见:[ 如何添加 python 国内源?] ( https://www.baidu.com/s?wd=python%20%E5%9B%BD%E5%86%85%E6%BA%90&rsv_spt=1&rsv_iqid=0xd4c874b700022c35&issp=1&f=8&rsv_bp=1&rsv_idx=2&ie=utf-8&rqlang=cn&tn=baiduhome_pg&rsv_enter=0&rsv_t=ca7cGiKHZYyi4WMSjK1f%2BXazzuAjqbqCTbXjSrEq6oiaXwF3im1hQl9E9xE9fKWkDccY&oq=python%2520%25E5%259B%25BD%25E5%2586%2585%25E6%25BA%2590&rsv_pq=ba65a2f20001ea73 )
2539
26- ## 开发文档生成
40+ ## 开发文档生成
2741
2842docs文件夹包含基于sphinx的开发文档生成文件,在此文件夹下可通过运行make html命令可生成build目录,build/html目录即为开发文档
2943
@@ -33,14 +47,16 @@ ufile文件夹包含SDK的具体实现,该文件夹亦是名为ufile的package
3347
3448### 公共参数说明
3549
36- ~~~~~~~~~~~~~~~ {.py}
37- public_key = '' #账户公私钥中的公钥
38- private_key = '' #账户公私钥中的私钥
39- ~~~~~~~~~~~~~~~
50+ ``` python
51+ public_key = ' ' # 公钥或token
52+ private_key = ' ' # 私钥或token
53+ ```
54+
55+ [ 如何创建一个token?] ( https://console.ucloud.cn/ufile/token )
4056
41- ### 设置参数
57+ ### 设置默认参数
4258
43- ~~~~~~~~~~~~~~~ {.py}
59+ ``` python
4460from ufile import config
4561
4662# 设置上传host后缀,外网可用后缀形如 .cn-bj.ufileos.com(cn-bj为北京地区,其他地区具体后缀可见控制台:对象存储-单地域空间管理-存储空间域名)
@@ -53,26 +69,28 @@ config.set_default(connection_timeout=60)
5369config.set_default(expires = 60 )
5470# 设置上传文件是否校验md5
5571config.set_default(md5 = True )
56- ~~~~~~~~~~~~~~~
72+ ```
73+
74+ * 如果在实例化 FileManager 和 MultipartUploadUFile 实例时传入相关参数,则生成的实例会使用传入的值,而不是此处设置的默认值。
5775
5876### 设置日志文件
5977
60- ~~~~~~~~~~~~~~~ {.py}
78+ ``` python
6179from ufile import logger
6280
6381locallogname = ' ' # 完整本地日志文件名
6482logger.set_log_file(locallogname)
65- ~~~~~~~~~~~~~~~
83+ ```
6684
6785### 支持普通上传
6886
6987* demo 程序
7088
71- ~~~~~~~~~~~~~~~ {.py}
72- public_bucket = '' #公共空间名称
73- private_bucket = '' #私有空间名称
74- localfile = '' #本地文件名
75- put_key = '' #上传文件在空间中的名称
89+ ``` python
90+ public_bucket = ' ' # 公共空间名称
91+ private_bucket = ' ' # 私有空间名称
92+ localfile = ' ' # 本地文件名
93+ put_key = ' ' # 上传文件在空间中的名称
7694
7795from ufile import filemanager
7896
@@ -91,7 +109,7 @@ from io import BytesIO
91109bio = BytesIO(u ' Do be a good man' .encode(' utf-8' )) # 二进制数据流
92110stream_key = ' ' # 上传数据流在空间中的名称
93111ret, resp = putufile_handler.putstream(public_bucket, stream_key, bio)
94- ~~~~~~~~~~~~~~~
112+ ```
95113
96114* HTTP 返回状态码
97115
@@ -106,7 +124,7 @@ ret, resp = putufile_handler.putstream(public_bucket, stream_key, bio)
106124
107125* demo程序
108126
109- ~~~~~~~~~~~~~~~ {.py}
127+ ``` python
110128public_bucket = ' ' # 公共空间名称
111129private_bucket = ' ' # 私有空间名称
112130localfile = ' ' # 本地文件名
@@ -123,7 +141,7 @@ assert resp.status_code == 200
123141# 表单上传至私有空间
124142ret, resp = postufile_handler.postfile(private_bucket, post_key, localfile)
125143assert resp.status_code == 200
126- ~~~~~~~~~~~~~~~
144+ ```
127145
128146* HTTP 返回状态码
129147
@@ -138,7 +156,7 @@ assert resp.status_code == 200
138156
139157* demo程序
140158
141- ~~~~~~~~~~~~~~~ {.py}
159+ ``` python
142160public_bucket = ' ' # 公共空间名称
143161existkey = ' ' # 添加上传文件在空间中的名称
144162nonexistkey = ' ' # 添加上传文件在空间中的名称
@@ -156,7 +174,7 @@ assert resp.status_code == 200
156174# 秒传不存在文件
157175ret, resp = uploadhitufile_handler.uploadhit(public_bucket, nonexistkey, nonexistfile)
158176assert resp.status_code == 404
159- ~~~~~~~~~~~~~~~
177+ ```
160178
161179* HTTP 状态返回码
162180
@@ -172,7 +190,7 @@ assert resp.status_code == 404
172190
173191* demo程序
174192
175- ~~~~~~~~~~~~~~~ {.py}
193+ ``` python
176194public_bucket = ' ' # 公共空间名称
177195private_bucket = ' ' # 私有空间名称
178196public_savefile = ' ' # 保存文件名
@@ -196,7 +214,7 @@ assert resp.status_code == 200
196214# 下载包含文件范围请求的文件
197215ret, resp = downloadufile_handler.download_file(public_bucket, put_key, range_savefile, isprivate = False , expires = 300 , content_range = (0 , 15 ))
198216assert resp.status_code == 206
199- ~~~~~~~~~~~~~~~
217+ ```
200218
201219* HTTP 返回状态码
202220
@@ -214,7 +232,7 @@ assert resp.status_code == 206
214232
215233* demo程序
216234
217- ~~~~~~~~~~~~~~~ {.py}
235+ ``` python
218236public_bucket = ' ' # 公共空间名称
219237private_bucekt = ' ' # 私有空间名称
220238delete_key = ' ' # 文件在空间中的名称
@@ -230,7 +248,7 @@ assert resp.status_code == 204
230248# 删除私有空间的文件
231249ret, resp = deleteufile_handler.deletefile(private_bucket, delete_key)
232250assert resp.status_code == 204
233- ~~~~~~~~~~~~~~~
251+ ```
234252
235253* HTTP 返回状态码
236254
@@ -244,7 +262,7 @@ assert resp.status_code == 204
244262
245263* demo程序
246264
247- ~~~~~~~~~~~~~~~ {.py}
265+ ``` python
248266public_bucket = ' ' # 公共空间名称
249267sharding_key = ' ' # 上传文件在空间中的名称
250268localfile = ' ' # 本地文件名
@@ -276,7 +294,7 @@ elif resp.status_code == -1: # 网络连接问题,续传
276294else : # 服务器或者客户端错误
277295 print (resp.error)
278296 break
279- ~~~~~~~~~~~~~~~
297+ ```
280298
281299* HTTP 返回状态码
282300
@@ -291,7 +309,7 @@ else: # 服务器或者客户端错误
291309
292310* demo 程序
293311
294- ~~~~~~~~~~~~~~~ {.py}
312+ ``` python
295313public_bucket = ' ' # 公共空间名称
296314localfile = ' ' # 本地文件名
297315put_key = ' ' # 上传文件在空间中的名称
@@ -309,7 +327,7 @@ assert rest.status_code == 200
309327# 解冻冷存文件
310328ret, resp = restorefile_handler.restore_file(public_bucket, put_key)
311329assert resp.status_code == 200
312- ~~~~~~~~~~~~~~~
330+ ```
313331
314332* HTTP 返回状态码
315333
@@ -324,7 +342,7 @@ assert resp.status_code == 200
324342
325343* demo 程序
326344
327- ~~~~~~~~~~~~~~~ {.py}
345+ ``` python
328346public_bucket = ' ' # 公共空间名称
329347localfile = ' ' # 本地文件名
330348put_key = ' ' # 上传文件在空间中的名称
@@ -343,7 +361,7 @@ assert rest.status_code == 200
343361# 标准文件类型转换为低频文件类型
344362ret, resp = classswitch_handler.class_switch_file(public_bucket, put_key, IA )
345363assert resp.status_code == 200
346- ~~~~~~~~~~~~~~~
364+ ```
347365
348366* HTTP 返回状态码
349367
@@ -356,7 +374,7 @@ assert resp.status_code == 200
356374
357375### 比较本地文件和远程文件etag
358376
359- ~~~~~~~~~~~~~~~ {.py}
377+ ``` python
360378from ufile import filemanager
361379
362380public_bucket = ' ' # 添加公共空间名称
@@ -369,11 +387,11 @@ if result==True:
369387 logger.info(' \n etag are the same!' )
370388else :
371389 logger.info(' \n etag are different!' )
372- ~~~~~~~~~~~~~~~
390+ ```
373391
374392### 获取文件列表
375393
376- ~~~~~~~~~~~~~~~ {.py}
394+ ``` python
377395bucket = ' ' # 空间名称
378396
379397from ufile import filemanager
@@ -385,11 +403,11 @@ limit=10 #文件列表数目
385403marker= ' ' # 文件列表起始位置
386404ret, resp = getfilelist_hander.getfilelist(bucket, prefix = prefix, limit = limit, marker = marker)
387405assert resp.status_code == 200
388- ~~~~~~~~~~~~~~~
406+ ```
389407
390408### 获取目录文件列表
391409
392- ~~~~~~~~~~~~~~~ {.py}
410+ ``` python
393411bucket = ' ' # 空间名称
394412
395413from ufile import filemanager
@@ -403,13 +421,13 @@ delimiter='/' #delimiter是目录分隔符,当前只支持"/"和" ",当Delim
403421
404422ret, resp = listobjects_hander.listobjects(bucket, prefix = prefix, maxkeys = maxkeys, marker = marker, delimiter = delimiter)
405423assert resp.status_code == 200
406- ~~~~~~~~~~~~~~~
424+ ```
407425
408426### 支持拷贝
409427
410428* demo 程序
411429
412- ~~~~~~~~~~~~~~~ {.py}
430+ ``` python
413431public_bucket = ' ' # 公共空间名称
414432key = ' ' # 目的文件在空间中的名称
415433srcbucket = ' ' # 源文件所在空间名称
@@ -422,7 +440,7 @@ copyufile_handler = filemanager.FileManager(public_key, private_key)
422440# 拷贝文件
423441ret, resp = copyufile_handler.copy(public_bucket, key, srcbucket, srckey)
424442assert resp.status_code == 200
425- ~~~~~~~~~~~~~~~
443+ ```
426444
427445* HTTP 返回状态码
428446
@@ -437,7 +455,7 @@ assert resp.status_code == 200
437455
438456* demo 程序
439457
440- ~~~~~~~~~~~~~~~ {.py}
458+ ``` python
441459public_bucket = ' ' # 公共空间名称
442460key = ' ' # 源文件在空间中的名称
443461newkey = ' ' # 目的文件在空间中的名称
@@ -449,7 +467,7 @@ renameufile_handler = filemanager.FileManager(public_key, private_key)
449467# 拷贝文件
450468ret, resp = renameufile_handler.rename(public_bucket, key, newkey, ' true' )
451469assert resp.status_code == 200
452- ~~~~~~~~~~~~~~~
470+ ```
453471
454472* HTTP 返回状态码
455473
@@ -463,7 +481,7 @@ assert resp.status_code == 200
463481
464482### 空间管理
465483
466- ~~~~~~~~~~~~~~~ {.py}
484+ ``` python
467485from ufile import bucketmanager
468486
469487bucketmanager_handler = bucketmanager.BucketManager(public_key, private_key)
@@ -486,4 +504,4 @@ print(ret)
486504# 更改bucket属性
487505bucketname = ' ' # 待更改的私有空间名称
488506bucketmanager_handler.updatebucket(bucketname, ' public' ):
489- ~~~~~~~~~~~~~~~
507+ ```
0 commit comments