• 欢迎访问愉悦人生,我会在这里分享一些我认为有趣的东西,欢迎关注!
  • 永远相信美好的事情即将发生!
  • 好久没更新了,也不知道该更新什么

腾讯云对象存储COS简单上传python脚本

折腾不止 Nvito 10个月前 (12-13) 1122次浏览 1个评论

腾讯云对象存储COS简单上传python脚本

前言

最近在捣鼓腾讯云的产品,发现腾讯云的对象存储有免费额度(真香),琢磨了一下,随手写了一个很白痴的上传脚本。

记·我的站点迁移过程

前言 话说之前一直都是在用阿里云+宝塔面板搭建的wordpress博客系统,宝塔面板确实是挺好用的,有付费服务 […]

使用方法

1.手动上传三份最新的备份文件到COS存储桶(若本地备份文件夹内无备份文件,脚本会报错,后面有时间再修改)

2.申请腾讯API密钥
腾讯云对象存储COS简单上传python脚本

3.服务器命令行下安装python3、requests模块、腾讯COS-Python SDK

yum -y install python3
pip3 install -U requests cos-python-sdk-v5

4.上传脚本至服务器并修改关键参数(注意看注释,不然肯定会出错)

5.写crontab定时任务执行脚本

0 3 * * 2,4,6 /usr/bin/bash /www/script/backup_site.sh > /dev/null 2>&1 &   #备份脚本,星期二四六凌晨三点执行
0 4 * * 2,4,6 /usr/bin/python3 /www/script/COS_Bak.py > /dev/null 2>&1 &  #上传脚本,星期二四六凌晨四点执行

python脚本

#!/usr/bin/env python3
# -*-coding:utf-8-*-

import datetime
import logging
import os
import time

from qcloud_cos import CosConfig
from qcloud_cos import CosS3Client


def get_path(local_path, cos_path):
    Local_file_list = os.listdir(local_path)
    Sort_file_list = sorted(Local_file_list, key=lambda x: os.path.getctime(os.path.join(local_path, x)), reverse=True)
    if len(Sort_file_list) < 4:  # 做一个判断,文件少于特定数量则退出程序
        logger.warning('(网站/数据库)备份文件数量少于4个,无法使用脚本备份')
        exit(2)

    upload_file_path = os.path.join(local_path, Sort_file_list[0])
    cos_file_path = os.path.join(cos_path, Sort_file_list[0])
    del_file_cos = os.path.join(cos_path, Sort_file_list[3])
    return upload_file_path, cos_file_path, del_file_cos


def TencentClient():
    secret_id = ''
    secret_key = ''
    region = 'ap-guangzhou'  # 存储桶所在地区
    token = None
    scheme = 'https'
    config = CosConfig(Region=region, SecretId=secret_id, SecretKey=secret_key, Token=token, Scheme=scheme)
    client = CosS3Client(config)
    return client


def CheckExist(client, CosFile):
    try:
        client.head_object(Bucket=Bucket_Name, Key=CosFile)
        return True
    except:
        return False


def UploadFile(client, filename, cosPath):  # filename 为本地文件完整路径; cosPath 为存储桶完整路径
    try:
        Start_Stime = time.strftime("%H%M%S")
        client.upload_file(Bucket=Bucket_Name, Key=cosPath, LocalFilePath=filename, EnableMD5=True)
        End_Etime = time.strftime("%H%M%S")
        if CheckExist(client, cosPath):
            logger.info('上传文件>>>  {0} 成功,耗时:{1}s\t'.format(cosPath, str(int(End_Etime) - int(Start_Stime))))
        else:
            logger.warning('上传文件>>>  {0} 失败\t'.format(cosPath))
    except Exception as e:
        logger.error(str(e))


def DelCosFile(client, DelFile):
    try:
        if CheckExist(client, DelFile):
            client.delete_objects(Bucket=Bucket_Name, key=DelFile)
            if not CheckExist(client, DelFile):
                logger.info('存储桶中的>>> {0} 文件删除成功'.format(DelFile))
            else:
                logger.warning('存储桶中的>>> {0} 文件删除失败'.format(DelFile))
        else:
            logger.info('文件>>>  {0} 不存在,无需删除'.format(DelFile))
    except Exception as e:
        logger.error(str(e))


if __name__ == "__main__":
    logger = logging.getLogger(__name__)
    logger.setLevel(level=logging.INFO)
    handler = logging.FileHandler('/www/backup/backup.log', encoding='utf-8')  # 操作日志存放位置
    formatter = logging.Formatter('[%(asctime)s] [%(levelname)s] Message: %(message)s', datefmt='%Y-%m-%d %H:%M:%S')
    handler.setFormatter(formatter)
    logger.addHandler(handler)

    local_web_path, web_cos_path = '/www/backup/website/', 'Web_Bak/'  # 本地web备份目录,Cos存储桶web文件存放目录
    local_db_path, db_cos_path = '/www/backup/db/', 'DB_Bak/'  # 数据库路径,同上
    Bucket_Name = 'backup-1252400613'  # 存储桶
    LocalWeb, CosWeb, DelWeb = get_path(local_web_path, web_cos_path)
    LocalDB, CosDB, DelDB = get_path(local_db_path, db_cos_path)
    client = TencentClient()
    if CheckExist(client, CosWeb):
        logger.info('备份文件>>>  {0} 已存在,无需重复上传'.format(CosWeb))
    else:
        UploadFile(client, LocalWeb, CosWeb)
        DelCosFile(client, DelWeb)

    if CheckExist(client, CosDB):
        logger.info('备份文件>>>  {0} 已存在,无需重复上传'.format(CosDB))
    else:
        UploadFile(client, LocalDB, CosDB)
        DelCosFile(client, DelDB)


愉悦人生 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:腾讯云对象存储COS简单上传python脚本
喜欢 (3)
发表我的评论
取消评论

表情 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
(1)个小伙伴在吐槽
  1. Nvito
    对你有帮助的小伙伴给我留个言支持一下吧~~~~
    Nvito2019-12-13 23:55 回复 Windows 10 | Chrome 78.0.3904.108