百度云存储(BCS)提供了很强大的存储空间,其官方提供的python SDK相当详细,操作也比较简单,下面简单的说下它的用法,抛砖引玉,大家有什么更好的用途也请赐教
官方使用手册:http://bcs.duapp.com/pcs-doc/bcsh-usage.html
官方SDK文档:http://bcs.duapp.com/pcs-doc/bcs-epydoc/index.html
1.下载 http://peak.telecommunity.com/dist/ez_setup.py 保存, 这个脚本将帮组我们安装 setuptools 运行该脚本,将会安装setuptools
2.安装pycurl, pycurl 可选安装, 如果不安装pycurl, 将默认使用httplib 作为上传下载, 会把文件内容读到内存中, 所以性能较差. 如果文件较大,必须安装pycurl
3.下载pybcs http://bcs.duapp.com/cplat-01/bcs/Baidu-BCS-SDK-Python-1.3.2.zip
4.解压,cmd切换到解压后的目录中,执行 python setup.py install
注意,默认会从pypi的国外站点访问,国内经常访问不了,需要将pypi换到国内的镜像
如果你的%HOMEPATH%\ 下面有pip/pip.ini 文件那么直接编辑,没有的话自已手工添加一个,在里面写入或者修改
[global]
timeout = 60
index-url = [http://pipy.douban.com/simple](http://pipy.douban.com/simple)
这个会将到pypi的请求切换到国内的豆瓣镜像,速度相当好,改后再执行 python setup.py install
5.在百度开发者中心中新建一个应用,记下它的api key(AK)与Secret Key(SK)然后点击后创建一个Bucket,官方给的解释是这个bucket相当于一个namespace,这样理解挺好
6.打开baidu-bcs的SDK,里面有一个example.py,这里面的coding是utf8的,windows建议改成gbk的,要不后面有很多乱码的
7.修改里面的AK与SK为你自已的,BUCKET为你刚才创建的
8.其实这个example.py里写的都挺好的,但是我想要仔细地读下它的代码
bcs
=
pybcs.BCS(
'
http://bcs.duapp.com/
'
, AK, SK, pybcs.HttplibHTTPC)
查看官方sdk文档,class BCS的 init方法要传(self, host, ak, sk, httpclient_class=None)几个参数
方法 list_buckets(self)
列举所有的buckets 将其实保存在一个字典里,下面的for循环将遍历你所创建的所有bucket
9.试着上传一个文件,思路是先确定要上传到哪个bucket,然后再用上传的方法来上传
b = bcs.bucket(BUCKET) ##这里先确定你要上传到哪个bucket
b.create() ##这里将进行创建一个新的bucket,如果没有的话,如果存在的话则会报错
o = b.object('/test2/360doskillupload.php') ##声明一个object,也就是你想要上传文件到的目的地址与文件名
o.put_file('test2/360doskill.php') ##将本地的文件上传上去,
o.delete() ##将这个object也就是云端的文件删除
这个是单个文件的上传与删除,可以拓展一下上传一下本地的目录到BCS上,在BCS上也是保持同样的目录
代码如下
# !/usr/bin/env python
# coding:gbk
import os
import logging
import pybcs
#设置日志级别
pybcs.init_logging(logging.INFO)
#请修改这里
AK = ''
# 请改为你的AK
SK = ''
# 请改为你的SK
BUCKET
=
''
#
改为你的bucket
bcs
=
pybcs.BCS(
'
http://bcs.duapp.com/
'
, AK, SK, pybcs.HttplibHTTPC)
#
这里可以显式选择使用的HttpClient, 可以是:
#
HttplibHTTPC
#
PyCurlHTTPC
def
listFile(path, isDeep
=
True):
_list
=
[]
if
isDeep:
try
:
for
root, dirs, files
in
os.walk(path):
for
fl
in
files:
_list.append(
'
%s\%s
'
%
(root, fl))
except
:
pass
else
:
for
fn
in
glob.glob( path
+
os.sep
+
'
*
'
):
if
not
os.path.isdir(fn):
_list.append(
'
%s
'
%
path
+
os.sep
+
fn[fn.rfind(
'
\\
'
)
+
1
:])
return
_list
b
=
bcs.bucket(BUCKET)
dir
=
os.getcwd()
+
'
\\01
'
#
#取一个和当前脚本同目录下的目录名
filelist
=
listFile(dir)
for
i
in
filelist:
ic
=
i.replace(os.getcwd(),
''
)
#
#去掉os.getcwd()前缀
upi
=
ic.replace(
'
\\
'
,
'
/
'
)
#
#将\替换为/
o
=
b.object(upi)
o.put_file(i)
SDK中同样还提供一个bcsh.py的脚本,里面已经集成了很多应用,可以通过调用脚本加参数的形式调用,同样非常方便
小编推荐一个学python的学习qun 740322234
无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!裙内有开发工具,很多干货和技术资料分享!
网友评论