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

脚本说明
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

参考文档
- python之sys模块详解:https://www.cnblogs.com/cherishry/p/5725184.html
- Aliyun OSS SDK for Python:https://aliyun-oss-python-sdk.readthedocs.io/en/stable
- aliyun-oss-python-sdk Github地址:https://github.com/aliyun/aliyun-oss-python-sdk/tree/master/oss2
Python:自动化上传OSS的更多相关文章
- 项目总结21:项目总结21:input实现多图上传(FormData)(上传OSS并保存数据库)
项目总结21:input实现多图上传(FormData)(上传OSS并保存数据库) 备注:本案例,作为Demo,包含少量的项目业务逻辑,input多图上传的逻辑是完整的: 不废话直接上代码 1-前端标 ...
- 图片上传oss--先拿server端签名再上传oss,返回id值
目前项目oss阿里云存储图片,图片上传主要步骤是:前端从服务端拿到签名signature,再上传到oss上busket里,上传成功返回图片id (imgId),最后再给server端: 注:官网上有个 ...
- Java&Selenium借助AutoIt 实现非Input类型自动化上传文件
通常情况下实现自动化上传文件,都是通过sendKeys函数直接将文件全路径传给页面空间就能完成,然而这种情况只能对Input类型的控件有效,对于非Input类型的控件可以借助AutoIt来完成 下载地 ...
- vue Base64图片压缩上传OSS
this.compress(result, 800, 0.5).then(val => { //得到压缩图片 let data = val; that.file = that.dataURLto ...
- autoIT 自动化上传/下载文件图文详解【python selenium】
情景: 在用selenium进行web页面自动化时,时不时会遇到上传附件的情况,常见的情况就是一个上传按钮,点击后弹出windows窗口,选择文件后上传,如下图1所示 图1 这种情况超出了seleni ...
- gulp前端自动化构建并上传oss
前言 前端自动化构建工具从最开始的grunt, gulp, fis等到现在比较流行的webpack可谓层出不穷,个人还是比较倾向于gulp,虽然有的时候会因为某个插件的配置问题头疼很久,但不可否认gu ...
- Python判断上传文件类型
在开发上传服务时,经常需要对上传的文件进行过滤. 本文为大家提供了python通过文件头判断文件类型的方法,非常实用. 代码如下 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ...
- vue打包上传oss
今天把vue打包之后上传到oss,遇到了一点问题,现在解决了总结一下心得: OSS (Object Storage Service)名为对象存储,配合cdn使用达到静态文件托管加速,提升网站文件访问速 ...
- web自动化上传附件 2
当我们进行某一项web自动化脚本编写时,有上传附件操作,点击附件直接打开了windows窗口,而有的点击添加附件打开一个小窗体,再点击‘浏览’才打开windows窗口, 中间多了这么一个小窗体的操作, ...
随机推荐
- Freemarker 的基础使用 (二)
freemarker 的基础使用二 ftl 文件 <html> <head> <meta http-equiv="Content-Type" cont ...
- 【转载】解决KindEditor图片上传对话框位置异常问题(浏览器放大缩小时对话框不见了)
今早在整理文件上传模块的时候,发现富文本编辑器 kindeditor 上传图片的对话框无法显示,其实对话框已经生成了,但是它没有top值,所以在页面上看不见. 捣鼓了一个多小时,代码看了一大串,没解决 ...
- FlashFXP 5.0.0官方中文破解版,附文件下载地址和破解码
FlashFXP 5.0.0官方中文破解版是一个功能强大的 FXP/FTP 软件,融合了一些其他优秀 FTP 软件的优点,如像 CuteFTP 一样可以比较文件夹,支持彩色文字显示:像 BpFTP 支 ...
- net 转 java
一,初衷 从事net 工作已经将近4年,net 很好,C#本身也是个优雅的语言,vs 编辑器功能也异常强大,光拖动断点这个功能java idea就无法实现.但是分布式,架构师的net 在国内岗位上比较 ...
- Django AJAX csrf
1.原始 a.在HTML中添加 {% csrf_token %} b.在data中添加csrf_token对应input的 键值对 "csrfmiddlewaretoken" : ...
- Java中整数值的4中表示方式u
Java中整数值有4中表示方式:十进制.二进制.八进制和十六进制,其中二进制的整数以0b或0B开头:八进制的整数以0开头: 十六进制的整数以0x或0X开头,其中10-15分别以a-f(此处的a-f不区 ...
- if(a)是什么意思
if(a)等价于 if(a!=0) if(!a)等价于 if(a==0)
- UIKit, AppKit, 以及其他API在多线程当中的使用注意事项
UIKit, AppKit, 以及其他API在多线程当中的使用注意事项 Overview The Main Thread Checker is a standalone tool for Swift ...
- leetcode腾讯精选练习之螺旋矩阵(八)
螺旋矩阵 题目 给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素. 示例 1: 输入: [ [ 1, 2, 3 ], ...
- CentOS7主机名的查看和修改
CentOS7主机名的查看和修改 在CentOS7中,有三种定义的主机名: 静态的(Static hostname) "静态"主机名也称为内核主机名,是系统在启动时从/etc/ho ...