@@ -27,9 +27,9 @@ Table of Contents
27
27
* [ 解冻归档文件] ( #解冻归档文件 )
28
28
* [ 文件类型转换] ( #文件类型转换 )
29
29
* [ 比较本地文件和远程文件etag] ( #比较本地文件和远程文件etag )
30
- * [ 获取文件列表 ] ( #获取文件列表 )
30
+ * [ 前缀列表查询 ] ( #前缀列表查询 )
31
31
* [ 获取目录文件列表] ( #获取目录文件列表 )
32
- * [ 拷贝 ] ( #拷贝 )
32
+ * [ 拷贝文件 ] ( #拷贝文件 )
33
33
* [ 重命名] ( #重命名 )
34
34
* [ 版本记录] ( #版本记录 )
35
35
* [ 联系我们] ( #联系我们 )
@@ -75,9 +75,6 @@ $ pip install --pre ufile
75
75
76
76
# 如果未安装pip
77
77
# 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
81
78
82
79
# 卸载
83
80
$ pip uninstall ufile
@@ -87,7 +84,9 @@ $ pip uninstall ufile
87
84
88
85
## 开发文档生成
89
86
90
- docs文件夹包含基于sphinx的开发文档生成文件,在此文件夹下可通过运行make html命令可生成build目录,build/html目录即为开发文档。
87
+ 源码中的docs文件夹包含基于sphinx的开发文档生成文件,下载相应的SDK包后,进入此文件夹,然后执行命令` make html ` 命令可生成build目录,build/html目录即为开发文档。
88
+
89
+ 注:Windows下可使用` .\make.bat html ` 命令生成build目录
91
90
92
91
[ 回到目录] ( #table-of-contents )
93
92
@@ -103,7 +102,13 @@ local_file = '' #本地文件名
103
102
put_key = ' ' # 上传文件在空间中的名称
104
103
save_file = ' ' # 下载文件保存的文件名
105
104
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' )
107
112
108
113
ufile_handler = filemanager.FileManager(public_key, private_key)
109
114
@@ -138,23 +143,24 @@ private_key = '' #私钥或token
138
143
```
139
144
140
145
* 密钥可以在控制台中 [ API 产品 - API 密钥] ( https://console.ucloud.cn/uapi/apikey ) ,点击显示 API 密钥获取。将 public_key 和 private_key 分别赋值给相关变量后,SDK即可通过此密钥完成鉴权。请妥善保管好 API 密钥,避免泄露。
141
-
142
146
* token(令牌)是针对指定bucket授权的一对公私钥。可通过token进行授权bucket的权限控制和管理。可以在控制台中[ 对象存储US3-令牌管理] ( https://console.ucloud.cn/ufile/token ) ,点击创建令牌获取。
147
+ * 管理 bucket 创建和删除必须要公私钥,如果只做文件上传和下载用 TOEKN 就够了,为了安全,强烈建议只使用 TOKEN 做文件管理
143
148
144
149
## 设置默认参数
145
150
146
151
``` python
147
152
from ufile import config
148
153
149
154
# 设置上传host后缀,外网可用后缀形如 .cn-bj.ufileos.com(cn-bj为北京地区,其他地区具体后缀可见控制台:对象存储-单地域空间管理-存储空间域名)
155
+ # 默认值为'.cn-bj.ufileos.com',如果上传文件的bucket所在地域不在北京,请务必设置此项
150
156
config.set_default(uploadsuffix = ' YOUR_UPLOAD_SUFFIX' )
151
157
# 设置下载host后缀,普通下载后缀即上传后缀,CDN下载后缀为 .ufile.ucloud.com.cn
152
158
config.set_default(downloadsuffix = ' YOUR_DOWNLOAD_SUFFIX' )
153
159
# 设置请求连接超时时间,单位为秒
154
160
config.set_default(connection_timeout = 60 )
155
161
# 设置私有bucket下载链接有效期,单位为秒
156
162
config.set_default(expires = 60 )
157
- # 设置上传文件是否校验md5
163
+ # 设置上传文件是否进行数据完整性校验(现仅支持putifle和putstream)
158
164
config.set_default(md5 = True )
159
165
```
160
166
@@ -190,10 +196,10 @@ from ufile import bucketmanager
190
196
bucketmanager_handler = bucketmanager.BucketManager(public_key, private_key)
191
197
192
198
# 创建新的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
195
201
ret, resp = bucketmanager_handler.createbucket(bucketname, region,' public' )
196
- assert resp.status_code == 200
202
+ print (ret)
197
203
198
204
# 删除bucket
199
205
bucketname = ' ' # 待删除的空间名称
@@ -207,7 +213,8 @@ print(ret)
207
213
208
214
# 更改bucket属性
209
215
bucketname = ' ' # 待更改的私有空间名称
210
- bucketmanager_handler.updatebucket(bucketname, ' public' )
216
+ ret, resp = bucketmanager_handler.updatebucket(bucketname, ' public' )
217
+ print (ret)
211
218
```
212
219
213
220
[ 回到目录] ( #table-of-contents )
@@ -243,6 +250,15 @@ from io import BytesIO
243
250
bio = BytesIO(u ' Do be a good man' .encode(' utf-8' )) # 二进制数据流
244
251
stream_key = ' ' # 上传数据流在空间中的名称
245
252
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
246
262
```
247
263
248
264
* HTTP 返回状态码
@@ -424,6 +440,16 @@ assert resp.status_code == 200
424
440
# 下载包含文件范围请求的文件
425
441
ret, resp = downloadufile_handler.download_file(public_bucket, put_key, range_savefile, isprivate = False , expires = 300 , content_range = (0 , 15 ))
426
442
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
427
453
```
428
454
429
455
* HTTP 返回状态码
@@ -511,7 +537,8 @@ assert resp.status_code == 204
511
537
512
538
* 说明
513
539
* 用于解冻归档类型的文件。
514
- * 解冻归档文件需要时间,所以归档文件解冻后不能立刻下载。因此如需下载归档文件,请在下载前使用[ 获取文件列表] ( #获取文件列表 ) 获取文件状态,若其返回值RestoreStatus为'Restored',则表示该归档文件已完成解冻。
540
+ * 解冻归档文件需要时间,一般在10s以内,所以归档文件解冻后不能立刻下载。
541
+ * 如需下载归档文件,请在下载前使用[ 前缀列表查询] ( #前缀列表查询 ) 获取文件状态,若其返回值RestoreStatus为'Restored',则表示该归档文件已完成解冻。
515
542
* demo 程序
516
543
517
544
``` python
@@ -537,6 +564,14 @@ assert resp.status_code == 200
537
564
# 解冻归档类型的文件
538
565
ret, resp = restorefile_handler.restore_file(bucket, put_key)
539
566
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'说明解冻成功
540
575
```
541
576
542
577
* HTTP 返回状态码
@@ -620,7 +655,7 @@ else:
620
655
621
656
[ 回到目录] ( #table-of-contents )
622
657
623
- ### 获取文件列表
658
+ ### 前缀列表查询
624
659
625
660
* 说明
626
661
* 获取存储空间(Bucket)中指定文件前缀的文件列表。
@@ -638,11 +673,23 @@ getfilelist_hander = filemanager.FileManager(public_key, private_key)
638
673
639
674
prefix= ' ' # 文件前缀
640
675
limit= 10 # 文件列表数目
641
- marker= ' ' # 文件列表起始位置
676
+ marker= ' ' # 返回以字母排序后,大于marker的文件列表
642
677
ret, resp = getfilelist_hander.getfilelist(bucket, prefix = prefix, limit = limit, marker = marker)
643
678
assert resp.status_code == 200
644
679
for object in ret[" DataSet" ]:
645
680
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
646
693
```
647
694
648
695
[ 回到目录] ( #table-of-contents )
@@ -651,6 +698,7 @@ for object in ret["DataSet"]:
651
698
652
699
* 说明
653
700
* 获取存储空间(Bucket)中指定目录下的文件列表。
701
+ * ** 注意** :目前该接口只有** 北京、上海、广州、台北、首尔** 地域支持。
654
702
* demo 程序
655
703
656
704
``` python
@@ -664,20 +712,45 @@ from ufile import filemanager
664
712
listobjects_hander = filemanager.FileManager(public_key, private_key)
665
713
666
714
prefix= ' ' # 以prefix作为前缀的目录文件列表
667
- maxkeys= 100 # 指定返回目录文件列表的最大数量
715
+ maxkeys= 100 # 指定返回目录文件列表的最大数量,默认值为100,不超过1000
668
716
marker= ' ' # 返回以字母排序后,大于marker的目录文件列表
669
- delimiter= ' /' # delimiter是目录分隔符,当前只 "/"和"",当Delimiter设置为"/"且prefiex以"/"结尾时,返回prefix目录下的子文件(不包含目录文件) ,当delimiter设置为""时,返回以prefix作为前缀的文件
717
+ delimiter= ' /' # delimiter是目录分隔符,当前只支持 "/"和"",当Delimiter设置为"/"且prefiex以"/"结尾时,返回prefix目录下的子文件,当delimiter设置为""时,返回以prefix作为前缀的文件
670
718
671
719
ret, resp = listobjects_hander.listobjects(bucket, prefix = prefix, maxkeys = maxkeys, marker = marker, delimiter = delimiter)
672
720
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
673
742
```
674
743
675
744
[ 回到目录] ( #table-of-contents )
676
745
677
- ### 拷贝
746
+ ### 拷贝文件
678
747
679
748
* 说明
680
- * 跨存储空间(Bucket)复制文件。
749
+
750
+ * 跨存储空间(Bucket)拷贝文件。
751
+ * 若当前Bucket已有key为dstKeyName的文件,则该操作会默认覆盖该文件,请谨慎操作。可先通过[ head_file] ( #查询文件基本信息 ) 进行判断。
752
+ * 目前文件拷贝的srcBucketName可以是同一账号相同地域下不同子账号的任意Bucket
753
+
681
754
* demo 程序
682
755
683
756
``` python
@@ -708,7 +781,7 @@ assert resp.status_code == 200
708
781
709
782
[ 回到目录] ( #table-of-contents )
710
783
711
- ### 重命名
784
+ ### 重命名文件
712
785
713
786
* 说明
714
787
* 重命名存储空间(Bucket)中的文件。
@@ -750,5 +823,8 @@ assert resp.status_code == 200
750
823
751
824
# 联系我们
752
825
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
+
0 commit comments