python2系列 接入阿里云oss sdk 实现上传脚本,亲测
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python2系列 接入阿里云oss sdk 实现上传脚本,亲测相关的知识,希望对你有一定的参考价值。
公司图片要从原有的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-internal.aliyuncs.com‘, ‘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) else: 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。加油,平常心学习,每天进步一点点!!
本文出自 “bobo的运维之路” 博客,转载请与作者联系!
以上是关于python2系列 接入阿里云oss sdk 实现上传脚本,亲测的主要内容,如果未能解决你的问题,请参考以下文章
在OneThink(ThinkPHP3.2.3)中整合阿里云OSS的PHP-SDK2.0.4,实现Web端直传,服务端签名直传并设置上传回调的实现流程