Python:自动化上传OSS

简介

最近在学习Python,为之庞大的第三方库感到震撼。今天分享一个Python 自动化脚本,功能是将H5静态资源上传到OSS,以方便实现CDN加速,我将其放在Jenkins自动发布中使用。该脚本不是我的原创,是前同事留下的,希望对需要的小伙伴有所帮助。

安装阿里云第三方库

pip install oss2
img-w500

脚本说明

accesskey,accesspassword,bucketname,ossBucket 需要根据自己账户情况作出调整

脚本内容

#!/usr/bin/python
# -*- coding:utf8 -*-

import os
import sys
import oss2

# 阿里云相关的token
ossAuth = oss2.Auth('accesskey', 'accesspassword')
ossBucket = oss2.Bucket(ossAuth, 'oss-cn-hangzhou.aliyuncs.com', 'bucketname')

# 本地需要上传的文件或者目录,sys.argv: 实现从程序外部向程序传递参数。
pathfile = sys.argv[1]

# 判断是否输入目标目录(在oss中的目录,程序会自动创建),如果没有输入目标目录,则直接上传文件到oss的根目录下
if len(sys.argv) == 3:
    ossDir = sys.argv[2] + "/"
else:
    ossDir = ""

ee = [1]
ee[0] = 1
# 最后一次上传到哪个文件,第一次上传请修改ee[0]=1
ff = '550.jpg'


# 定义是目录
def list(dir):
    fs = os.listdir(dir)
    for f in fs:
        file = dir + "/" + f;
        print("file is" + ":" + file)
        if os.path.isdir(file):
            list(file)
        else:
            uploadDir(file)


# 上传带目录的文件到OSS
def uploadDir(path_filename):
    print("------------------")
    print(path_filename)
    remoteName = ossDir + path_filename.split('//')[1]
    print("remoteName is" + ":" + remoteName)
    print('uploading..', path_filename, 'remoteName', remoteName)
    if (ee[0] == 0 and remoteName == ff):
        ee[0] = 1
    if 1 == ee[0]:
        result = ossBucket.put_object_from_file(remoteName, path_filename)
        print('http_status: {0}'.format(result.status))


# 上传文件到OSS
def uploadFile(filename):
    remoteName = ossDir + os.path.basename(filename)
    print("remoteName is" + ":" + remoteName)
    print('uploading..', filename, 'remoteName', remoteName)
    if (ee[0] == 0 and remoteName == ff):
        ee[0] = 1
    if 1 == ee[0]:
        result = ossBucket.put_object_from_file(remoteName, filename)
        print('http_status: {0}'.format(result.status))


##判断是文件还是目录
if os.path.isdir(pathfile):
    if pathfile.endswith('/'):
        pass
    else:
        pathfile += "/"
    print("it's a directory")
    list(pathfile)
elif os.path.isfile(pathfile):
    print("it's a normal file")
    uploadFile(pathfile)
else:
    print("it's a special file (socket, FIFO, device file)")

执行效果展示

python /etc/ansible/scripts/bxq-online-oss.py $WORKSPACE/dist
img-w500

参考文档

转载于:https://www.cnblogs.com/William-Guozi/p/python-oss.html

首先,你需要安装阿里云Python SDK,可以通过以下命令安装: ``` pip install aliyun-python-sdk-core pip install aliyun-python-sdk-sts pip install aliyun-python-sdk-oss ``` 接着,你需要在阿里云控制台中创建一个AccessKey,用于访问阿里云API。 然后,你可以先编写一个简单的Python脚本,用于上传文件到阿里云OSS: ```python import os import datetime import oss2 # 阿里云AccessKey信息 access_key_id = '<your-access-key-id>' access_key_secret = '<your-access-key-secret>' # 阿里云OSS存储桶信息 endpoint = '<your-oss-endpoint>' bucket_name = '<your-bucket-name>' bucket = oss2.Bucket(oss2.Auth(access_key_id, access_key_secret), endpoint, bucket_name) # 本地文件路径 local_file_path = '<your-local-file-path>' # 上传OSS的文件名 timestamp = datetime.datetime.now().strftime('%Y%m%d%H%M%S') file_name = timestamp + '_' + os.path.basename(local_file_path) # 上传文件 bucket.put_object_from_file(file_name, local_file_path) ``` 以上代码通过阿里云Python SDK创建了一个OSS Bucket对象,并使用put_object_from_file方法将本地文件上传到阿里云OSS中。 如果你想实现自动化上传,你可以使用Python的watchdog库,监控指定目录中文件的变化,并在文件变化后调用上述代码进行上传。以下是一个简单的watchdog实现示例: ```python import os import datetime import time import watchdog.events import watchdog.observers import oss2 # 阿里云AccessKey信息 access_key_id = '<your-access-key-id>' access_key_secret = '<your-access-key-secret>' # 阿里云OSS存储桶信息 endpoint = '<your-oss-endpoint>' bucket_name = '<your-bucket-name>' bucket = oss2.Bucket(oss2.Auth(access_key_id, access_key_secret), endpoint, bucket_name) # 本地监控目录 watch_path = '<your-watch-path>' class FileEventHandler(watchdog.events.FileSystemEventHandler): def on_created(self, event): if event.is_directory: return local_file_path = event.src_path timestamp = datetime.datetime.now().strftime('%Y%m%d%H%M%S') file_name = timestamp + '_' + os.path.basename(local_file_path) bucket.put_object_from_file(file_name, local_file_path) if __name__ == "__main__": event_handler = FileEventHandler() observer = watchdog.observers.Observer() observer.schedule(event_handler, watch_path, recursive=True) observer.start() try: while True: time.sleep(1) except KeyboardInterrupt: observer.stop() observer.join() ``` 以上代码使用watchdog库监控指定目录中的文件变化,在文件被创建时调用上述上传代码进行上传
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值