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我還是有些激動,運行結果圖示如下:

wKiom1ikbfaTjo5pAACznWKy-jI649.png-wh_50 ,

其實,最近也開始在學習php程序,公司的後臺就是用的php,很有必要學習php。每天學一點,然後

我也即將用php來接入這個sdk。加油,平常心學習,每天進步一點點!!


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章