最初是使用 OSS-Browser 客户端上传前端静态资源到 OSS Bucket 里的,需要针对不同的环境,上传不同的静态资源到 OSS Bucket,每次都要切换账号,非常的笨拙机械,同时也无法也加入到自动化流程里,所以才有了这篇文章。
oss-browser.png
首先需要通过 pip 工具安装 oss2
pip install oss2
如果在安装过程中遇到一些网络问题,可以参考我之前写的一篇文章:Windows 命令行工具 CMD 设置网络代理
通过 oss2.Auth
方法进行授权认证
access_key_id = '6MKOqxGiGU4AUk44'
access_key_secret = 'ufu7nS8kS59awNihtjSonMETLI0KLy'
auth = oss2.Auth(access_key_id, access_key_secret)
通过 oss2.Bucket
方法获取 bucket 对象
endpoint = 'https://oss-cn-shanghai.aliyuncs.com'
bucket_name = 'static'
bucket = oss2.Bucket(auth, endpoint, bucket_name)
通过 bucket.put_object_from_file
方法上传本地文件到 OSS Bucket 里
key = '/v1.0.0/index.html'
filename = r'D:\project\index.html'
bucket.put_object_from_file(key, filename)
通过 bucket.object_exists
方法判断 OSS Bucket 是否已经存在相关资源。在上传文件之前,最好验证一下 key 是否存在,避免误操作,覆盖已有的线上资源,造成线上事故
key = '/v1.0.0'
bucket.object_exists(key)
封装获取 OSS Bucket 对象的方法,根据不同的环境,返回不同 bucket 对象
def get_bucket(env):
endpoint = 'https://oss-cn-shanghai.aliyuncs.com'
env_bucket = {
's': {
'access_key_id': '',
'access_key_secret': '',
'bucket_name': ''
},
'p': {
'access_key_id': '',
'access_key_secret': '',
'bucket_name': ''
}
}
auth = oss2.Auth(env_bucket[env]['access_key_id'], env_bucket[env]['access_key_secret'])
bucket = oss2.Bucket(auth, endpoint, env_bucket[env]['bucket_name'])
return bucket
批量上传本地前端资源到 OSS Bucket 里
if __name__ == "__main__":
env = 's'
version = 'v1.0.0'
source_folder = r'D:\project'
bucket = get_bucket(env)
dest_folder_map = {
's': 'static-staging/%s' % version,
'p': 'static/%s' % version
}
dest_folder = dest_folder_map[env]
if bucket.object_exists(dest_folder):
print('%s 已存在,不可以重复上传文件' % dest_folder)
exit()
files = os.listdir(source_folder)
total = len(files)
count = 0
for file in files:
key = dest_folder + '/' + file
filename = source_folder + '\\' + file
bucket.put_object_from_file(key, filename)
count += 1
print('{0} [{1}/{2}]'.format(file, count, total))
通过 os.listdir
列出源目录下的文件列表,通过 count
和 total
来观察前端静态资源的上传进度。
参考资料
如果这篇文章对您有帮助,记得给作者点个赞,谢谢!