oss存储有很多批量上传的文 = = 然后现在是由于程序主动删除了oss的文件,阿里是不给恢复的,所以想要把文件备份到本地 。
阿里的oss是key-values形式的存储,没有文件夹的概念,也是就是说test/007.jpg实际上是两个文件 一个叫做test/的空文件和一个叫做test/007.jpg 的文件
看了ossfs osscmd 都可以实现批量下载,然后ossfs挂载上去对其操作都是在oss端的操作,后者 还没用。
故此,自己写了个很烂的代码。先暂时满足下需求。囧 ,不行的话还是采用osscmd多线程支持断电续传吧 囧。没办法 渣呀。。。。。。。
直接贴了 。。。还有 模块记得安装 pip install oss2
#coding:utf-8
from __future__ import print_function
import os,sys
import oss2
from itertools import islice
import urllib
import requests
import re
auth = oss2.Auth(' 您的AccessKeyId ', ' 您的AccessKeySecret ')
bucket = oss2.Bucket(auth, '地区', 'bucket桶名')
def mkdir(path):
path = path.strip()
path = path.rstrip("\\")
isExits = os.path.exists(path)
if not isExits:
print(path + "创建成功")
os.makedirs(path)
return True
else:
print(path+"目录存在")
return False
def percentage(consumed_bytes, total_bytes):
if total_bytes:
rate = int(100 * (float(consumed_bytes) / float(total_bytes)))
print('\r{0}% '.format(rate), end='')
sys.stdout.flush()
for b in islice(oss2.ObjectIterator(bucket),sys.maxsize):
c = b.key
if c[-1:] == '/':
mkdir(c)
if c[-1:] != '/':
oss2.resumable_download(bucket, c, c,store=oss2.ResumableDownloadStore(root='/tmp'),multiget_threshold=20*1024*1024,part_size=10*1024*1024,num_threads=3,progress_callback=percentage)
print(c+"下载完成")
然后 期间创建目录看的是别人的文档,初学python 只能按别人的代码来 TOT。总感觉这样做太低效了,有其他好点的办法么 ,这样拼拼凑凑的代码 不忍直视 囧o(╯□╰)o 。 Python2.6 Python3.4都可以跑。
来自http://www.qttc.net/201209207.html
升级版 : 增量下载 o(╯□╰)o
#coding:utf-8
from __future__ import print_function
import os,sys
import oss2
from itertools import islice
import urllib
import requests
import re
import time
auth = oss2.Auth('同上', '同上')
bucket = oss2.Bucket(auth, '同上', '同上')
def mkdir(path):
path = path.strip()
path = path.rstrip("\\")
isExits = os.path.exists(path)
if not isExits:
print(path + "创建成功")
os.makedirs(path)
return True
else:
print(path+"目录已经存在")
return False
def percentage(consumed_bytes, total_bytes):
if total_bytes:
rate = int(100 * (float(consumed_bytes) / float(total_bytes)))
print('\r{0}% '.format(rate), end='')
sys.stdout.flush()
filename = time.strftime("%Y-%m-%d-%H%M%S", time.localtime())
for b in islice(oss2.ObjectIterator(bucket),sys.maxsize):
c = b.key
if c[-1:] == '/':
mkdir(c)
if c[-1:] != '/':
remote_stream = bucket.get_object(c)
print(remote_stream.last_modified)
ticks = time.time()
# file = open('time.txt','w')
# file.write(str(ticks))
file = open('time.txt','r')
f = file.read()
k = float(f)
if remote_stream.last_modified > k:
oss2.resumable_download(bucket, c, c,store=oss2.ResumableDownloadStore(root='/tmp'),multiget_threshold=20*1024*1024,part_size=10*1024*1024,num_threads=3,progress_callback=percentage)
#filename = time.strftime("%Y-%m-%d-%H%M%S", time.localtime())
print(filename)
fileobject = open(filename,'a')
fileobject.write(str(c))
#fileobject.close()
#bucket.get_object_to_file(c,c)
file = open('time.txt','w')
file.write(str(ticks))
file.close()
fileobject.close()
缺点:遍历 嗯 然后目录没有做提取 。然后下载地点就是本地 。之后再改改。哈哈
断点下载= =
#coding:utf-8
from __future__ import print_function
import os,sys
import oss2
from itertools import islice
import urllib
import requests
import re
auth = oss2.Auth('XXX', ' XXX')
bucket = oss2.Bucket(auth, ' XXX', ' XXX')
def mkdir(path):
path = path.strip()
path = path.rstrip("\\")
isExits = os.path.exists(path)
if not isExits:
print(path + "创建成功")
os.makedirs(path)
return True
else:
print(path+"目录已经存在")
return False
def percentage(consumed_bytes, total_bytes):
if total_bytes:
rate = int(100 * (float(consumed_bytes) / float(total_bytes)))
print('\r{0}% '.format(rate), end='')
sys.stdout.flush()
for b in islice(oss2.ObjectIterator(bucket),sys.maxsize):
c = b.key
if c[-1:] == '/':
mkdir('/ossbackup/ossback/'+c)
else:
cname = str(c)
sumnumber = 0
i = 0
for line2 in open('downname.txt','r'):
line1 = str(line2)
cname2 = str(cname+'\n')
if cname2 != line1:
i = i + 0
sumnumber = i
else:
i = i + 1
sumnumber = i
# print(sumnumber)
if sumnumber == 0 :
downfilename = open('downfilename.txt','w')
downfilename.write(str(cname))
print(cname+'is not download')
downfilename.close()
else :
print(cname+' is download')
downfilename = open('downfilename.txt','r')
lineend = downfilename.readline()
oss2.resumable_download(bucket,lineend,'/ossbackup/ossback/'+lineend,store=oss2.ResumableDownloadStore(root='/tmp'),multiget_threshold=20*1024*1024,part_size=10*1024*1024,num_threads=3,progress_callback=percentage)
print(lineend+"下载完成"+"\n")
file = open('downname.txt','a')
file.write(str(lineend)+"\n")
阿里的oss是key-values形式的存储,没有文件夹的概念,也是就是说test/007.jpg实际上是两个文件 一个叫做test/的空文件和一个叫做test/007.jpg 的文件
看了ossfs osscmd 都可以实现批量下载,然后ossfs挂载上去对其操作都是在oss端的操作,后者 还没用。
故此,自己写了个很烂的代码。先暂时满足下需求。囧 ,不行的话还是采用osscmd多线程支持断电续传吧 囧。没办法 渣呀。。。。。。。
直接贴了 。。。还有 模块记得安装 pip install oss2
#coding:utf-8
from __future__ import print_function
import os,sys
import oss2
from itertools import islice
import urllib
import requests
import re
auth = oss2.Auth(' 您的AccessKeyId ', ' 您的AccessKeySecret ')
bucket = oss2.Bucket(auth, '地区', 'bucket桶名')
def mkdir(path):
path = path.strip()
path = path.rstrip("\\")
isExits = os.path.exists(path)
if not isExits:
print(path + "创建成功")
os.makedirs(path)
return True
else:
print(path+"目录存在")
return False
def percentage(consumed_bytes, total_bytes):
if total_bytes:
rate = int(100 * (float(consumed_bytes) / float(total_bytes)))
print('\r{0}% '.format(rate), end='')
sys.stdout.flush()
for b in islice(oss2.ObjectIterator(bucket),sys.maxsize):
c = b.key
if c[-1:] == '/':
mkdir(c)
if c[-1:] != '/':
oss2.resumable_download(bucket, c, c,store=oss2.ResumableDownloadStore(root='/tmp'),multiget_threshold=20*1024*1024,part_size=10*1024*1024,num_threads=3,progress_callback=percentage)
print(c+"下载完成")
来自http://www.qttc.net/201209207.html
升级版 : 增量下载 o(╯□╰)o
#coding:utf-8
from __future__ import print_function
import os,sys
import oss2
from itertools import islice
import urllib
import requests
import re
import time
auth = oss2.Auth('同上', '同上')
bucket = oss2.Bucket(auth, '同上', '同上')
def mkdir(path):
path = path.strip()
path = path.rstrip("\\")
isExits = os.path.exists(path)
if not isExits:
print(path + "创建成功")
os.makedirs(path)
return True
else:
print(path+"目录已经存在")
return False
def percentage(consumed_bytes, total_bytes):
if total_bytes:
rate = int(100 * (float(consumed_bytes) / float(total_bytes)))
print('\r{0}% '.format(rate), end='')
sys.stdout.flush()
filename = time.strftime("%Y-%m-%d-%H%M%S", time.localtime())
for b in islice(oss2.ObjectIterator(bucket),sys.maxsize):
c = b.key
if c[-1:] == '/':
mkdir(c)
if c[-1:] != '/':
remote_stream = bucket.get_object(c)
print(remote_stream.last_modified)
ticks = time.time()
# file = open('time.txt','w')
# file.write(str(ticks))
file = open('time.txt','r')
f = file.read()
k = float(f)
if remote_stream.last_modified > k:
oss2.resumable_download(bucket, c, c,store=oss2.ResumableDownloadStore(root='/tmp'),multiget_threshold=20*1024*1024,part_size=10*1024*1024,num_threads=3,progress_callback=percentage)
#filename = time.strftime("%Y-%m-%d-%H%M%S", time.localtime())
print(filename)
fileobject = open(filename,'a')
fileobject.write(str(c))
#fileobject.close()
#bucket.get_object_to_file(c,c)
file = open('time.txt','w')
file.write(str(ticks))
file.close()
fileobject.close()
缺点:遍历 嗯 然后目录没有做提取 。然后下载地点就是本地 。之后再改改。哈哈
断点下载= =
#coding:utf-8
from __future__ import print_function
import os,sys
import oss2
from itertools import islice
import urllib
import requests
import re
auth = oss2.Auth('XXX', ' XXX')
bucket = oss2.Bucket(auth, ' XXX', ' XXX')
def mkdir(path):
path = path.strip()
path = path.rstrip("\\")
isExits = os.path.exists(path)
if not isExits:
print(path + "创建成功")
os.makedirs(path)
return True
else:
print(path+"目录已经存在")
return False
def percentage(consumed_bytes, total_bytes):
if total_bytes:
rate = int(100 * (float(consumed_bytes) / float(total_bytes)))
print('\r{0}% '.format(rate), end='')
sys.stdout.flush()
for b in islice(oss2.ObjectIterator(bucket),sys.maxsize):
c = b.key
if c[-1:] == '/':
mkdir('/ossbackup/ossback/'+c)
else:
cname = str(c)
sumnumber = 0
i = 0
for line2 in open('downname.txt','r'):
line1 = str(line2)
cname2 = str(cname+'\n')
if cname2 != line1:
i = i + 0
sumnumber = i
else:
i = i + 1
sumnumber = i
# print(sumnumber)
if sumnumber == 0 :
downfilename = open('downfilename.txt','w')
downfilename.write(str(cname))
print(cname+'is not download')
downfilename.close()
else :
print(cname+' is download')
downfilename = open('downfilename.txt','r')
lineend = downfilename.readline()
oss2.resumable_download(bucket,lineend,'/ossbackup/ossback/'+lineend,store=oss2.ResumableDownloadStore(root='/tmp'),multiget_threshold=20*1024*1024,part_size=10*1024*1024,num_threads=3,progress_callback=percentage)
print(lineend+"下载完成"+"\n")
file = open('downname.txt','a')
file.write(str(lineend)+"\n")
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/30629069/viewspace-2129464/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/30629069/viewspace-2129464/