前言
上一篇基於七牛Python SDK寫的一個同步腳本所寫的腳本只支持上傳,不支持文件下載。 雖然這個需求不太強烈,但有可能有人(在備份、遷移時)需要,而官方有沒提供對應的工具,所以我就把這個功能也加上。
實現
下載腳本的核心邏輯
(博客園的markdown代碼區顯示不友好,可以到我的個人博客中瀏覽)
#!/usr/bin/env python
#-*- coding:utf-8 -*-
#
# AUTHOR = "heqingpan"
# AUTHOR_EMAIL = "[email protected]"
# URL = "http://git.oschina.net/hqp/qiniu_sync"
import qiniu
from qiniu import Auth
from qiniu import BucketManager
import os
import re
import urllib2
import sys
access_key = ''
secret_key = ''
bucket_name = ''
bucket_domain = ''
q = Auth(access_key, secret_key)
bucket = BucketManager(q)
basedir=os.path.realpath(os.path.dirname(__file__))
#同步目錄
#basedir=""
filename=__file__
ignore_paths=[filename,"{0}c".format(filename)]
ignore_names=[".DS_Store",".git",".gitignore"]
charset="utf8"
diff_time=2*60
def list_all(bucket_name, bucket=None, prefix="", limit=100):
rlist=[]
if bucket is None:
bucket = BucketManager(q)
marker = None
eof = False
while eof is False:
ret, eof, info = bucket.list(bucket_name, prefix=prefix, marker=marker, limit=limit)
marker = ret.get('marker', None)
for item in ret['items']:
rlist.append(item["key"])
if eof is not True:
# 錯誤處理
#print "error"
pass
return rlist
def down_file(key,basedir="",is_private=1,expires=3600):
if isinstance(key,unicode):
key=key.encode(charset)
url = 'http://%s/%s' % (bucket_domain, key)
if is_private:
url=q.private_download_url(url, expires=expires)
c=urllib2.urlopen(url)
fpath=key.replace("/",os.sep)
savepath=os.path.join(basedir,fpath)
dir_=os.path.dirname(savepath)
if not os.path.isdir(dir_):
os.makedirs(dir_)
elif os.path.isfile(savepath):
os.remove(savepath)
f = file(savepath, 'wb')
f.write(c.read())
f.close()
def down_all(prefix=""):
import traceback
for key in list_all(bucket_name,bucket,prefix=prefix):
try:
down_file(key,basedir=basedir)
print "down:\t"+key
except:
print "error down:\t"+key
print traceback.format_exc()
print "down end"
def main():
if len(sys.argv)>1:
if sys.argv[1]=="down":
prefix=len(sys.argv)>2 and sys.argv[2] or ""
down_all(prefix=prefix)
return
if __name__=="__main__":
main()
使用方式
安裝七牛Python SDK
pip install qiniu
填寫腳本文件(qiniusync.py)的配置信息
access_key = ''
secret_key = ''
bucket_name = ''
bucket_domain = ''
註冊後可以拿到對應的信息
將腳本文件(qiniusync.py)拷貝到待同步根目錄
運行腳本
python qiniusync.py down
python qiniusync.py down [文件路徑前綴]
後記
我已經將下載的腳本與同步腳本整合在一起,放到GitOSC和github上。 至此該腳本支持批量下載、同步上傳。
博客園的markdown代碼區顯示不友好,可以到我的個人博客中瀏覽