python 阿里云oss2php oss 上传文件件 remote.txt参数是什么

python2系列 接入阿里云oss sdk 实现上传脚本,亲测
时间: 12:03:50
&&&& 阅读:716
&&&& 评论:
&&&& 收藏:0
标签:&&&&&&&&&&&&&&&公司图片要从原有的nfs存储上迁移到oss存储上,其实阿里云提供的很多种方式,但是作为一枚运维人员很有必要学会使用ossutil工具,当然接入阿里oss的python的sdk也是很有必要的,下面我就将我写的简单的脚本样例晒一下:#!&/usr/bin/env&python
#!&-*-&coding:utf8&-*-
"""&aliyujn&oss2&python&sdk&上传测试测试!!"""
from&__future__&import&print_function
import&oss2
import&os,sys
#&初始化oss登录验证
auth&=&oss2.Auth(‘xxxxxxxxxxxx‘,&‘xxxxxxxxxxxxxxxxxx‘)
#&所有app图片bucket
imgs_bucket&=&oss2.Bucket(auth,&‘oss-cn-shanghai-‘,&‘yijiaoyuan-img‘)
###############################
##&&&&&以上是初始化程序&&&&&&##&
##---------------------------##&&&&&&&&&&&&
##&&&以下是oss&bucket操作&&&&##
###############################
#&本地资源路径初始化
apps&=&(‘api.yijiaoyuan.net‘,‘passport.letiku.net‘,‘score.letiku.net‘,‘tcms.letiku.net‘,‘tcmsq.letiku.net‘,‘tiku.letiku.net‘,‘www.letiku.net‘,‘xiyizhiyeyishi.letiku.net‘,‘xiyizhulizyys.letiku.net‘,‘yijiaoyuan.letiku.net‘,‘yjy.yijiaoyuan.net‘)
uploads_dirs&=&[‘/www/web/‘&+&‘test.‘&+&app&+&‘/Uploads‘&for&app&in&apps]
imgs_bucket_dirs&=&[]
imgs_bucket_files&=&[]
local_res_files=&[]
#&获取bucket上的文件和目录资源,因为bucket上没有文件夹的概念
def&get_res_on_bucket():
for&obj&in&oss2.ObjectIterator(imgs_bucket,delimiter="/"):
if&obj.is_prefix():
imgs_bucket_dirs.append(obj)
print(‘directory:‘&+&obj.key)
print(‘file:‘&+&obj.key)
imgs_bucket_files.append(obj)
#&文件归类,获取要上传的图片的本地res的所有文件的绝对路径
def&getLocalFiles(dir):
&&&&if&os.path.exists(dir):
&&&&&&&&for&res&in&os.listdir(dir):
&&&&&&&&&&&&ab_dir&=&dir+os.sep+res
&&&&&&&&&&&&if&os.path.isfile(ab_dir):
&&&&&&&&&&&&&&&#if&res_uri.endswith(‘.jpg‘)&or&res_uri.endswith(‘.png‘):
&&&&&&&&&&&&&&&&if&ab_dir.endswith(‘.jpg‘)&or&ab_dir.endswith(‘.png‘):
&&&&&&&&&&&&&&&&&&&&local_res_files.append(ab_dir)
&&&&&&&&&&&&if&os.path.isdir(ab_dir):
&&&&&&&&&&&&&&&&getLocalFiles(ab_dir)
#&上传文件
def&putFileToBucket():
&&&&for&file&in&local_res_files:
&&&&&&&&#&key:&bucket上的名称
&&&&&&&&key&=&file[file.find(‘Uploads‘):]
&&&&&&&&result&=&imgs_bucket.put_object_from_file(key,file,progress_callback=percentage)
&&&&&&&&print(result)
#&起始程序
def&start(dir):
for&dir&in&uploads_dirs:
&&&&&&&&&&&&getLocalFiles(dir)
#&进度条功能
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()
if&__name__&==&"__main__":
#get_res_on_bucket()
start(uploads_dirs)
&&&&#print(local_res_files)
&&&&putFileToBucket()作为一个运维人员第一次接入sdk我还是有些激动,运行结果图示如下:&,其实,最近也开始在学习php程序,公司的后台就是用的php,很有必要学习php。每天学一点,然后我也即将用php来接入这个sdk。加油,平常心学习,每天进步一点点!! 本文出自 “” 博客,转载请与作者联系!标签:&&&&&&&&&&&&&&&
&&国之画&&&& &&&&chrome插件&&
版权所有 京ICP备号-2
迷上了代码!Python+Shell脚本结合阿里云OSS对象存储定时远程备份网站 | 张戈博客
博客宗旨 把最实用的经验,分享给最需要的读者,希望每一位来访的朋友都能有所收获!
<span class="tipso_style" id="tip-w" data-tipso=''>
浏览 7662301 次
留言 17197 条
随便挑了些,看你喜欢嘛
关于博客 张戈博客是关注互联网以及分享IT运维工作经验的个人博客,主要涵盖了操作系统运维、实用脚本编程以及博客网站建设等经验教程。我的博客宗旨:把最实用的经验,分享给最需要的读者,希望每一位来访的朋友都能有所收获!4302人阅读
前段时间公司让研究阿里云OSS,说计划会用起来。OSS就是一个阿里提供的在线存储服务,其实原先公司自己搭建的文件服务器也就能用,不过可能是为了以后的业务扩大着想,让提前研究使用了。OSS的基本概念他官网上有很多资料,我这里也就不再说了。研究了一整子,整理了一些方法,所以这里记录出来。本人是小白一枚,一下的知识竟可能的浅显,但也是我自己研究使用的思路,开始也没有找到一篇全面的使用手册,因为官方的SDK也是简洁的不能再简洁了。
本篇文章希望你先看完官方的API了解一下OSS基本语法和概念再来应该比较容易懂。
这里给出官方的OSS API:官方SDK:官方帮助文档:OSS GitHub地址:OSS java 依赖jar包地址:
1.首先确保你已经注册并开通了OSS服务,并在控制台建立好了bucket,并获取到了accessKeyId和accessKeySecret
2.创建一个配置文件,里面存放OSS需要的endpoit和一些以后可能会改定的配置。
config.properties:
#阿里云OSS配置
endpoint = http://oss-cn-
//可以选择其他的地址
bucketName = ft-pic
//已经在控制台创建的bucket
picLocation = CDoc/cms/
//你上传文件的保存路径,如果bucket中不存在则创建(其实原理并不是文件夹,只是文件名,详情请先阅读官方文档)
accessKeyId = ***********
//相应的id和key值,请填写你具体的值,这里不方便展示我自己的。
accessKeySecret = ************
3.创建一个读取配置文件的工具类,这并不是必须的,你可以按照自己的方式来实现配置的调取
SystemConfig.java:
import java.io.IOE
import java.io.InputS
import java.util.P
* 读取后缀名为“.properties”的文件
public class SystemConfig {
private static final String CONFIG_PROPERTIES=&config.properties&;
public static String getConfigResource(String key) throws IOException{
ClassLoader loader = Thread.currentThread().getContextClassLoader();
Properties properties = new Properties();
InputStream in = loader.getResourceAsStream(CONFIG_PROPERTIES);
properties.load(in);
String value = properties.getProperty(key);
// 编码转换,从ISO-8859-1转向指定编码
value = new String(value.getBytes(&ISO-8859-1&), &UTF-8&);
in.close();
4.创建一个OSS配置类,用来方便的获取基本信息。
OSSConfig.java:
* @ClassName: OSSConfig
* @Description: OSS配置类
* @author AggerChen
* @date 日 下午3:58:36
class OSSConfig{
//连接区域地址
String accessKeyId;
//连接keyId
String accessKeyS
//连接秘钥
String bucketN
//需要存储的bucketName
String picL
//图片保存路径
public OSSConfig() {
this.endpoint = SystemConfig.getConfigResource(&endpoint&);
this.bucketName = SystemConfig.getConfigResource(&bucketName&);
this.picLocation = SystemConfig.getConfigResource(&picLocation&);
this.accessKeyId = SystemConfig.getConfigResource(&accessKeyId&);
this.accessKeySecret = SystemConfig.getConfigResource(&accessKeySecret&);
} catch (IOException e) {
e.printStackTrace();
public String getEndpoint() {
public void setEndpoint(String endpoint) {
this.endpoint =
public String getAccessKeyId() {
return accessKeyId;
public void setAccessKeyId(String accessKeyId) {
this.accessKeyId = accessKeyId;
public String getAccessKeySecret() {
return accessKeyS
public void setAccessKeySecret(String accessKeySecret) {
this.accessKeySecret = accessKeyS
public String getBucketName() {
return bucketN
public void setBucketName(String bucketName) {
this.bucketName = bucketN
public String getPicLocation() {
return picL
public void setPicLocation(String picLocation) {
this.picLocation = picL
5.编写OSS上传工具类
OSSUploadUtil.java:
package com.fortis.cms.
import java.io.F
import java.io.FileInputS
import java.io.FileNotFoundE
import java.io.IOE
import java.io.InputS
import java.util.ArrayL
import java.util.L
import java.util.UUID;
import com.aliyun.oss.ClientE
import com.aliyun.oss.OSSC
import com.aliyun.oss.OSSE
import com.aliyun.oss.model.DeleteObjectsR
import com.aliyun.oss.model.DeleteObjectsR
import com.aliyun.oss.model.GenericR
import com.aliyun.oss.model.ObjectM
import com.aliyun.oss.model.PutObjectR
* @ClassName: OSSUploadUtil
* @Description: 阿里云OSS文件上传工具类
* @author AggerChen
* @date 日 下午12:03:24
public class OSSUploadUtil {
private static OSSConfig config =
* @MethodName: uploadFile
* @Description: OSS单文件上传
* @param file
* @param fileType 文件后缀
* @return String 文件地址
public static String uploadFile(File file,String fileType){
config = config==null?new OSSConfig():
String fileName = config.getPicLocation()+UUID.randomUUID().toString().toUpperCase().replace(&-&, &&)+&.&+fileT //文件名,根据UUID来
return putObject(file,fileType,fileName);
* @MethodName: updateFile
* @Description: 更新文件:只更新内容,不更新文件名和文件地址。
(因为地址没变,可能存在浏览器原数据缓存,不能及时加载新数据,例如图片更新,请注意)
* @param file
* @param fileType
* @param oldUrl
* @return String
public static String updateFile(File file,String fileType,String oldUrl){
String fileName = getFileName(oldUrl);
if(fileName==null)
return putObject(file,fileType,fileName);
* @MethodName: replaceFile
* @Description: 替换文件:删除原文件并上传新文件,文件名和地址同时替换
解决原数据缓存问题,只要更新了地址,就能重新加载数据)
* @param file
* @param fileType 文件后缀
* @param oldUrl 需要删除的文件地址
* @return String 文件地址
public static String replaceFile(File file,String fileType,String oldUrl){
boolean flag = deleteFile(oldUrl);
//先删除原文件
if(!flag){
//更改文件的过期时间,让他到期自动删除。
return uploadFile(file, fileType);
* @MethodName: deleteFile
* @Description: 单文件删除
* @param fileUrl 需要删除的文件url
* @return boolean 是否删除成功
public static boolean deleteFile(String fileUrl){
config = config==null?new OSSConfig():
String bucketName = OSSUploadUtil.getBucketName(fileUrl);
//根据url获取bucketName
String fileName = OSSUploadUtil.getFileName(fileUrl);
//根据url获取fileName
if(bucketName==null||fileName==null)
OSSClient ossClient =
ossClient = new OSSClient(config.getEndpoint(), config.getAccessKeyId(), config.getAccessKeySecret());
GenericRequest request = new DeleteObjectsRequest(bucketName).withKey(fileName);
ossClient.deleteObject(request);
} catch (Exception oe) {
oe.printStackTrace();
} finally {
ossClient.shutdown();
* @MethodName: batchDeleteFiles
* @Description: 批量文件删除(较快):适用于相同endPoint和BucketName
* @param fileUrls 需要删除的文件url集合
* @return int 成功删除的个数
public static int deleteFile(List&String& fileUrls){
int deleteCount = 0; //成功删除的个数
String bucketName = OSSUploadUtil.getBucketName(fileUrls.get(0));
//根据url获取bucketName
List&String& fileNames = OSSUploadUtil.getFileName(fileUrls);
//根据url获取fileName
if(bucketName==null||fileNames.size()&=0) return 0;
OSSClient ossClient =
ossClient = new OSSClient(config.getEndpoint(), config.getAccessKeyId(), config.getAccessKeySecret());
DeleteObjectsRequest request = new DeleteObjectsRequest(bucketName).withKeys(fileNames);
DeleteObjectsResult result = ossClient.deleteObjects(request);
deleteCount = result.getDeletedObjects().size();
} catch (OSSException oe) {
oe.printStackTrace();
throw new RuntimeException(&OSS服务异常:&, oe);
} catch (ClientException ce) {
ce.printStackTrace();
throw new RuntimeException(&OSS客户端异常:&, ce);
} finally {
ossClient.shutdown();
return deleteC
* @MethodName: batchDeleteFiles
* @Description: 批量文件删除(较慢):适用于不同endPoint和BucketName
* @param fileUrls 需要删除的文件url集合
* @return int 成功删除的个数
public static int deleteFiles(List&String& fileUrls){
int count = 0;
for (String url : fileUrls) {
if(deleteFile(url)){
* @MethodName: putObject
* @Description: 上传文件
* @param file
* @param fileType
* @param fileName
* @return String
private static String putObject(File file,String fileType,String fileName){
config = config==null?new OSSConfig():
String url =
//默认null
OSSClient ossClient =
ossClient = new OSSClient(config.getEndpoint(), config.getAccessKeyId(), config.getAccessKeySecret());
InputStream input = new FileInputStream(file);
ObjectMetadata meta = new ObjectMetadata();
// 创建上传Object的Metadata
meta.setContentType(OSSUploadUtil.contentType(fileType));
// 设置上传内容类型
meta.setCacheControl(&no-cache&);
// 被下载时网页的缓存行为
PutObjectRequest request = new PutObjectRequest(config.getBucketName(), fileName,input,meta);
//创建上传请求
ossClient.putObject(request);
url = config.getEndpoint().replaceFirst(&http://&,&http://&+config.getBucketName()+&.&)+&/&+fileN
//上传成功再返回的文件路径
} catch (OSSException oe) {
oe.printStackTrace();
} catch (ClientException ce) {
ce.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
ossClient.shutdown();
* @MethodName: contentType
* @Description: 获取文件类型
* @param FileType
* @return String
private static String contentType(String fileType){
fileType = fileType.toLowerCase();
String contentType = &&;
switch (fileType) {
case &bmp&: contentType = &image/bmp&;
case &gif&: contentType = &image/gif&;
case &png&:
case &jpeg&:
case &jpg&: contentType = &image/jpeg&;
case &html&:contentType = &text/html&;
case &txt&: contentType = &text/plain&;
case &vsd&: contentType = &application/vnd.visio&;
case &ppt&:
case &pptx&:contentType = &application/vnd.ms-powerpoint&;
case &doc&:
case &docx&:contentType = &application/msword&;
case &xml&:contentType = &text/xml&;
case &mp4&:contentType = &video/mp4&;
default: contentType = &application/octet-stream&;
return contentT
* @MethodName: getBucketName
* @Description: 根据url获取bucketName
* @param fileUrl 文件url
* @return String bucketName
private static String getBucketName(String fileUrl){
String http = &http://&;
String https = &https://&;
int httpIndex = fileUrl.indexOf(http);
int httpsIndex = fileUrl.indexOf(https);
int startIndex
if(httpIndex==-1){
if(httpsIndex==-1){
startIndex = httpsIndex+https.length();
startIndex = httpIndex+http.length();
int endIndex = fileUrl.indexOf(&.oss-&);
return fileUrl.substring(startIndex, endIndex);
* @MethodName: getFileName
* @Description: 根据url获取fileName
* @param fileUrl 文件url
* @return String fileName
private static String getFileName(String fileUrl){
String str = &/&;
int beginIndex = fileUrl.indexOf(str);
if(beginIndex==-1)
return fileUrl.substring(beginIndex+str.length());
* @MethodName: getFileName
* @Description: 根据url获取fileNames集合
* @param fileUrl 文件url
* @return List&String&
fileName集合
private static List&String& getFileName(List&String& fileUrls){
List&String& names = new ArrayList&&();
for (String url : fileUrls) {
names.add(getFileName(url));
6.调用测试,OSSUploadUtil工具类对外只提供了几个方法:
OSSUploadUtil.uploadFile(File file, String fileType)&//单文件上传,type:文件后缀名
OSSUploadUtil.updateFile(File file, String fileType, String oldUrl)//更新文件:只更新内容,不更新文件名和文件地址。
OSSUploadUtil.replaceFile(File file, String fileType, String oldUrl)//替换文件,删除源文件并上传新文件,文件名和地址也改变
OSSUploadUtil.deleteFile(List&String& fileUrls)
//删除多文件,根据问价url来自定获取其中的bucket和文件名,用于bucket和文件名可能存在不同的,循环调用deleteFile方法
OSSUploadUtil.deleteFile(String fileUrl) //删除单文件
OSSUploadUtil.deleteFiles(List&String& fileUrls)
//删除多文件,根据配置直接取删除多个文件,bucket和文件地址从配置中获取,用于多文件bucket和文件名都相同的
本例只是简单的运用,当然还有更高级的应用暂时还没有研究,希望以后有空再分享出来。其中很多例子,在官方的SDK中都有,本文只是展示了对于我这里适用的方式,其他的多种配置方式请参考官方文档。如有问题,可以提出,希望能够交流和共同学习。本文示例皆为原创,转载请注明出处。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:18644次
排名:千里之外
评论:26条
(1)(1)(1)(1)(1)(1)(2)
(window.slotbydup = window.slotbydup || []).push({
id: '4740881',
container: s,
size: '200,200',
display: 'inlay-fix'博客访问: 9564
博文数量: 9
注册时间:
认证徽章:
ITPUB论坛APP
ITPUB论坛APP
APP发帖 享双倍积分
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
分类: Linux
&&&&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
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
& & & & 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*,part_size=10*,num_threads=3,progress_callback=percentage)
& & & & print(c+"下载完成")
然后 期间创建目录看的是别人的文档,初学python 只能按别人的代码来 TOT。总感觉这样做太低效了,有其他好点的办法么 ,这样拼拼凑凑的代码 不忍直视 囧o(╯□╰)o 。 Python2.6 Python3.4都可以跑。
来自http://www.qttc.net/.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 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
& & & & 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*,part_size=10*,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
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
& & & & 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)
& & & & 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*,part_size=10*,num_threads=3,progress_callback=percentage)
& & & & print(lineend+"下载完成"+"\n")
& & & & file = open('downname.txt','a')
& & & & file.write(str(lineend)+"\n")
阅读(88) | 评论(0) | 转发(0) |
相关热门文章
给主人留下些什么吧!~~
请登录后评论。}

我要回帖

更多关于 阿里oss上传文件 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信