Skip to content

Commit 89dd9bc

Browse files
author
davis.zheng
committed
1. 修改readme
2. 增加example文件
1 parent 214eb14 commit 89dd9bc

20 files changed

+479
-100
lines changed

README.md

Lines changed: 99 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,9 @@ Table of Contents
2727
* [解冻归档文件](#解冻归档文件)
2828
* [文件类型转换](#文件类型转换)
2929
* [比较本地文件和远程文件etag](#比较本地文件和远程文件etag)
30-
* [获取文件列表](#获取文件列表)
30+
* [前缀列表查询](#前缀列表查询)
3131
* [获取目录文件列表](#获取目录文件列表)
32-
* [拷贝](#拷贝)
32+
* [拷贝文件](#拷贝文件)
3333
* [重命名](#重命名)
3434
* [版本记录](#版本记录)
3535
* [联系我们](#联系我们)
@@ -75,9 +75,6 @@ $ pip install --pre ufile
7575

7676
# 如果未安装pip
7777
# pip官网:https://pypi.org/project/pip/
78-
# 或者使用以下方法来安装:
79-
$ curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py # 下载安装脚本
80-
$ sudo python get-pip.py # 运行安装脚本 Python3则执行:sudo python3 get-pip.py
8178

8279
#卸载
8380
$ pip uninstall ufile
@@ -87,7 +84,9 @@ $ pip uninstall ufile
8784

8885
## 开发文档生成
8986

90-
docs文件夹包含基于sphinx的开发文档生成文件,在此文件夹下可通过运行make html命令可生成build目录,build/html目录即为开发文档。
87+
源码中的docs文件夹包含基于sphinx的开发文档生成文件,下载相应的SDK包后,进入此文件夹,然后执行命令`make html`命令可生成build目录,build/html目录即为开发文档。
88+
89+
注:Windows下可使用`.\make.bat html`命令生成build目录
9190

9291
[回到目录](#table-of-contents)
9392

@@ -103,7 +102,13 @@ local_file = '' #本地文件名
103102
put_key = '' #上传文件在空间中的名称
104103
save_file = '' #下载文件保存的文件名
105104

106-
from ufile import filemanager
105+
from ufile import config,filemanager
106+
107+
#以下两项如果不设置,则默认设为'.cn-bj.ufileos.com',如果上传、下载文件的bucket所在地域不在北京,请务必设置以下两项。
108+
#设置上传host后缀,外网可用后缀形如 .cn-bj.ufileos.com(cn-bj为北京地区,其他地区具体后缀可见控制台:对象存储-单地域空间管理-存储空间域名)
109+
config.set_default(uploadsuffix='YOUR_UPLOAD_SUFFIX')
110+
#设置下载host后缀,普通下载后缀即上传后缀,CDN下载后缀为 .ufile.ucloud.com.cn
111+
config.set_default(downloadsuffix='YOUR_DOWNLOAD_SUFFIX')
107112

108113
ufile_handler = filemanager.FileManager(public_key, private_key)
109114

@@ -138,23 +143,24 @@ private_key = '' #私钥或token
138143
```
139144

140145
* 密钥可以在控制台中 [API 产品 - API 密钥](https://console.ucloud.cn/uapi/apikey),点击显示 API 密钥获取。将 public_key 和 private_key 分别赋值给相关变量后,SDK即可通过此密钥完成鉴权。请妥善保管好 API 密钥,避免泄露。
141-
142146
* token(令牌)是针对指定bucket授权的一对公私钥。可通过token进行授权bucket的权限控制和管理。可以在控制台中[对象存储US3-令牌管理](https://console.ucloud.cn/ufile/token),点击创建令牌获取。
147+
* 管理 bucket 创建和删除必须要公私钥,如果只做文件上传和下载用 TOEKN 就够了,为了安全,强烈建议只使用 TOKEN 做文件管理
143148

144149
## 设置默认参数
145150

146151
```python
147152
from ufile import config
148153

149154
#设置上传host后缀,外网可用后缀形如 .cn-bj.ufileos.com(cn-bj为北京地区,其他地区具体后缀可见控制台:对象存储-单地域空间管理-存储空间域名)
155+
#默认值为'.cn-bj.ufileos.com',如果上传文件的bucket所在地域不在北京,请务必设置此项
150156
config.set_default(uploadsuffix='YOUR_UPLOAD_SUFFIX')
151157
#设置下载host后缀,普通下载后缀即上传后缀,CDN下载后缀为 .ufile.ucloud.com.cn
152158
config.set_default(downloadsuffix='YOUR_DOWNLOAD_SUFFIX')
153159
#设置请求连接超时时间,单位为秒
154160
config.set_default(connection_timeout=60)
155161
#设置私有bucket下载链接有效期,单位为秒
156162
config.set_default(expires=60)
157-
#设置上传文件是否校验md5
163+
#设置上传文件是否进行数据完整性校验(现仅支持putifle和putstream)
158164
config.set_default(md5=True)
159165
```
160166

@@ -190,10 +196,10 @@ from ufile import bucketmanager
190196
bucketmanager_handler = bucketmanager.BucketManager(public_key, private_key)
191197

192198
# 创建新的bucket
193-
bucketname = '' #创建的空间名称
194-
region = 'cn-bj'#空间所在的地理区域
199+
bucketname = '' #创建的空间名称,命名规范参见https://docs.ucloud.cn/api/ufile-api/create_bucket
200+
region = 'cn-bj'#空间所在的地理区域,详细信息见https://docs.ucloud.cn/ufile/introduction/region
195201
ret, resp = bucketmanager_handler.createbucket(bucketname, region,'public')
196-
assert resp.status_code == 200
202+
print(ret)
197203

198204
# 删除bucket
199205
bucketname = '' #待删除的空间名称
@@ -207,7 +213,8 @@ print(ret)
207213

208214
# 更改bucket属性
209215
bucketname = '' # 待更改的私有空间名称
210-
bucketmanager_handler.updatebucket(bucketname, 'public')
216+
ret, resp = bucketmanager_handler.updatebucket(bucketname, 'public')
217+
print(ret)
211218
```
212219

213220
[回到目录](#table-of-contents)
@@ -243,6 +250,15 @@ from io import BytesIO
243250
bio = BytesIO(u'Do be a good man'.encode('utf-8')) #二进制数据流
244251
stream_key = '' #上传数据流在空间中的名称
245252
ret, resp = putufile_handler.putstream(bucket, stream_key, bio)
253+
assert resp.status_code == 200
254+
255+
# 普通上传文件到所在region为上海二的空间
256+
SH2_bucket = ''
257+
SH2_UPLOAD_SUFFIX = '.cn-sh2.ufileos.com'
258+
259+
filemgr_sh = filemanager.FileManager(public_key, private_key, upload_suffix=SH2_UPLOAD_SUFFIX)
260+
ret, resp = filemgr_sh.putfile(SH2_bucket , put_key, local_file, header=None)
261+
assert resp.status_code == 200
246262
```
247263

248264
* HTTP 返回状态码
@@ -424,6 +440,16 @@ assert resp.status_code == 200
424440
# 下载包含文件范围请求的文件
425441
ret, resp = downloadufile_handler.download_file(public_bucket, put_key, range_savefile, isprivate=False, expires=300, content_range=(0, 15))
426442
assert resp.status_code == 206
443+
444+
# 从所在region为上海二的私有空间下载文件
445+
SH2_bucket = ''
446+
SH2_put_key = ''
447+
SH2_private_savefile = ''
448+
SH2_DOWNLOAD_SUFFIX = '.cn-sh2.ufileos.com'
449+
450+
filemgr_sh = filemanager.FileManager(public_key, private_key, download_suffix=SH2_DOWNLOAD_SUFFIX )
451+
ret, resp = filemgr_sh.download_file(SH2_bucket, SH2_put_key, SH2_private_savefile)
452+
assert resp.status_code == 200
427453
```
428454

429455
* HTTP 返回状态码
@@ -511,7 +537,8 @@ assert resp.status_code == 204
511537

512538
* 说明
513539
* 用于解冻归档类型的文件。
514-
* 解冻归档文件需要时间,所以归档文件解冻后不能立刻下载。因此如需下载归档文件,请在下载前使用[获取文件列表](#获取文件列表)获取文件状态,若其返回值RestoreStatus为'Restored',则表示该归档文件已完成解冻。
540+
* 解冻归档文件需要时间,一般在10s以内,所以归档文件解冻后不能立刻下载。
541+
* 如需下载归档文件,请在下载前使用[前缀列表查询](#前缀列表查询)获取文件状态,若其返回值RestoreStatus为'Restored',则表示该归档文件已完成解冻。
515542
* demo 程序
516543

517544
```python
@@ -537,6 +564,14 @@ assert resp.status_code == 200
537564
# 解冻归档类型的文件
538565
ret, resp = restorefile_handler.restore_file(bucket, put_key)
539566
assert resp.status_code == 200
567+
568+
# 文件解冻一般在10s以内
569+
time.sleep(10)
570+
571+
# 查看归档文件解冻状态
572+
ret, resp = restorefile_handler.getfilelist(bucket, put_key)
573+
assert resp.status_code == 200
574+
print(ret['DataSet'][0]['RestoreStatus'])#'Frozen'说明解冻还未完成,'Restored'说明解冻成功
540575
```
541576

542577
* HTTP 返回状态码
@@ -620,7 +655,7 @@ else:
620655

621656
[回到目录](#table-of-contents)
622657

623-
### 获取文件列表
658+
### 前缀列表查询
624659

625660
* 说明
626661
* 获取存储空间(Bucket)中指定文件前缀的文件列表。
@@ -638,11 +673,23 @@ getfilelist_hander = filemanager.FileManager(public_key, private_key)
638673

639674
prefix='' #文件前缀
640675
limit=10 #文件列表数目
641-
marker='' #文件列表起始位置
676+
marker='' #返回以字母排序后,大于marker的文件列表
642677
ret, resp = getfilelist_hander.getfilelist(bucket, prefix=prefix, limit=limit, marker=marker)
643678
assert resp.status_code == 200
644679
for object in ret["DataSet"]:
645680
print(object)
681+
682+
# 根据返回值'NextMarker'循环遍历获得所有结果(若一次查询无法获得所有结果)
683+
while True:
684+
ret, resp = getfilelist_hander.getfilelist(bucket, prefix=prefix, limit=limit, marker=marker)
685+
assert resp.status_code == 200
686+
687+
for object in ret["DataSet"]:#
688+
print(object)
689+
690+
marker = ret['NextMarker']
691+
if len(marker) <= 0 or len(ret['DataSet']) < limit:
692+
break
646693
```
647694

648695
[回到目录](#table-of-contents)
@@ -651,6 +698,7 @@ for object in ret["DataSet"]:
651698

652699
* 说明
653700
* 获取存储空间(Bucket)中指定目录下的文件列表。
701+
* **注意**:目前该接口只有**北京、上海、广州、台北、首尔**地域支持。
654702
* demo 程序
655703

656704
```python
@@ -664,20 +712,45 @@ from ufile import filemanager
664712
listobjects_hander = filemanager.FileManager(public_key, private_key)
665713

666714
prefix='' #以prefix作为前缀的目录文件列表
667-
maxkeys=100 #指定返回目录文件列表的最大数量
715+
maxkeys=100 #指定返回目录文件列表的最大数量,默认值为100,不超过1000
668716
marker='' #返回以字母排序后,大于marker的目录文件列表
669-
delimiter='/' #delimiter是目录分隔符,当前只"/"和"",当Delimiter设置为"/"且prefiex以"/"结尾时,返回prefix目录下的子文件(不包含目录文件),当delimiter设置为""时,返回以prefix作为前缀的文件
717+
delimiter='/' #delimiter是目录分隔符,当前只支持"/"和"",当Delimiter设置为"/"且prefiex以"/"结尾时,返回prefix目录下的子文件,当delimiter设置为""时,返回以prefix作为前缀的文件
670718

671719
ret, resp = listobjects_hander.listobjects(bucket, prefix=prefix, maxkeys=maxkeys, marker=marker, delimiter=delimiter)
672720
assert resp.status_code == 200
721+
722+
for object in ret['Contents']:#子文件列表
723+
print(object)
724+
725+
for object in ret['CommonPrefixes']:#子目录列表
726+
print(object)
727+
728+
# 根据返回值'NextMarker'循环遍历获得所有结果(若一次查询无法获得所有结果)
729+
while True:
730+
ret, resp = listobjects_hander.listobjects(bucket, prefix=prefix, maxkeys=maxkeys, marker=marker, delimiter=delimiter)
731+
assert resp.status_code == 200
732+
733+
for object in ret['Contents']:#子文件列表
734+
print(object)
735+
736+
for object in ret['CommonPrefixes']:#子目录列表
737+
print(object)
738+
739+
marker = ret['NextMarker']
740+
if len(marker) <= 0 or len(ret['Contents'])+len(ret['CommonPrefixes']) < maxkeys:
741+
break
673742
```
674743

675744
[回到目录](#table-of-contents)
676745

677-
### 拷贝
746+
### 拷贝文件
678747

679748
* 说明
680-
* 跨存储空间(Bucket)复制文件。
749+
750+
* 跨存储空间(Bucket)拷贝文件。
751+
* 若当前Bucket已有key为dstKeyName的文件,则该操作会默认覆盖该文件,请谨慎操作。可先通过[head_file](#查询文件基本信息)进行判断。
752+
* 目前文件拷贝的srcBucketName可以是同一账号相同地域下不同子账号的任意Bucket
753+
681754
* demo 程序
682755

683756
```python
@@ -708,7 +781,7 @@ assert resp.status_code == 200
708781

709782
[回到目录](#table-of-contents)
710783

711-
### 重命名
784+
### 重命名文件
712785

713786
* 说明
714787
* 重命名存储空间(Bucket)中的文件。
@@ -750,5 +823,8 @@ assert resp.status_code == 200
750823

751824
# 联系我们
752825

753-
- [UCloud官方网站: https://www.ucloud.cn/](https://www.ucloud.cn/)
754-
- 如有任何问题,欢迎提交[issue](https://github.com/ucloud/ufile-sdk-python/issues)或联系我们的技术支持,我们会第一时间解决问题。
826+
- UCloud US3 [UCloud官方网站](https://www.ucloud.cn/)
827+
- UCloud US3[官方文档中心](https://docs.ucloud.cn/ufile/README)
828+
- UCloud 官方技术支持:[提交工单](https://accountv2.ucloud.cn/work_ticket/create)
829+
- 提交[issue](https://github.com/ucloud/ufile-sdk-python/issues)
830+

examples/common.py

Lines changed: 0 additions & 7 deletions
This file was deleted.

examples/example.jpg

-138 KB
Binary file not shown.

examples/example_bucketmanager.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
public_key = '' #账户公钥
2+
private_key = '' #账户私钥
3+
4+
from ufile import bucketmanager
5+
6+
bucketmanager_handler = bucketmanager.BucketManager(public_key, private_key)
7+
8+
# 创建新的bucket
9+
bucketname = '' #创建的空间名称,命名规范参见https://docs.ucloud.cn/api/ufile-api/create_bucket
10+
region = 'cn-bj'#空间所在的地理区域,详细信息见https://docs.ucloud.cn/ufile/introduction/region
11+
ret, resp = bucketmanager_handler.createbucket(bucketname, region,'public')
12+
print(ret)
13+
14+
# 删除bucket
15+
bucketname = '' #待删除的空间名称
16+
ret, resp = bucketmanager_handler.deletebucket(bucketname)
17+
print(ret)
18+
19+
# 获取bucket信息
20+
bucketname = '' # 待查询的空间名称
21+
ret, resp = bucketmanager_handler.describebucket(bucketname)
22+
print(ret)
23+
24+
# 更改bucket属性
25+
bucketname = '' # 待更改的私有空间名称
26+
ret, resp = bucketmanager_handler.updatebucket(bucketname, 'public')
27+
print(ret)

examples/example_class_switch_file.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
public_key = '' #账户公钥
2+
private_key = '' #账户私钥
3+
4+
bucket = '' #空间名称
5+
local_file = '' #本地文件名
6+
put_key = '' #上传文件在空间中的名称
7+
STANDARD = 'STANDARD' #标准文件类型
8+
IA = 'IA' #低频文件类型
9+
10+
from ufile import filemanager
11+
12+
putufile_handler = filemanager.FileManager(public_key, private_key)
13+
classswitch_handler = filemanager.FileManager(public_key, private_key)
14+
15+
# 普通上传文件至空间
16+
header = dict()
17+
header['X-Ufile-Storage-Class'] = STANDARD
18+
ret, resp = putufile_handler.putfile(bucket, put_key, local_file, header=header)
19+
assert resp.status_code == 200
20+
21+
# 标准文件类型转换为低频文件类型
22+
ret, resp = classswitch_handler.class_switch_file(bucket, put_key, IA)
23+
assert resp.status_code == 200

examples/example_compare_file_etag.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
from ufile import filemanager
2+
3+
public_key = '' #账户公钥
4+
private_key = '' #账户私钥
5+
6+
bucket = '' #添加空间名称
7+
put_key = '' #添加远程文件key
8+
local_file='' #添加本地文件路径
9+
10+
compare_handler = filemanager.FileManager(public_key, private_key)
11+
result=compare_handler.compare_file_etag(bucket,put_key,local_file)
12+
if result==True:
13+
print('etag are the same!')
14+
else:
15+
print('etag are different!')

examples/example_copy.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
public_key = '' #账户公钥
2+
private_key = '' #账户私钥
3+
bucket = '' #空间名称
4+
key = '' #目的文件在空间中的名称
5+
srcbucket = '' #源文件所在空间名称
6+
srckey = '' #源文件名称
7+
8+
from ufile import filemanager
9+
10+
copyufile_handler = filemanager.FileManager(public_key, private_key)
11+
12+
# 拷贝文件
13+
ret, resp = copyufile_handler.copy(bucket, key, srcbucket, srckey)
14+
assert resp.status_code == 200

examples/example_deletefile.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
public_key = '' #账户公钥
2+
private_key = '' #账户私钥
3+
4+
bucket = '' #空间名称
5+
delete_key = '' #文件在空间中的名称
6+
7+
from ufile import filemanager
8+
9+
deleteufile_handler = filemanager.FileManager(public_key, private_key)
10+
11+
# 删除空间的文件
12+
ret, resp = deleteufile_handler.deletefile(bucket, delete_key)
13+
assert resp.status_code == 204

0 commit comments

Comments
 (0)