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窗口, 中间多了这么一个小窗体的操作, ...
随机推荐
- jenkins +git+ssh 构建 .net项目
jenkins +git+ssh 构建 .net项目 安装jenkins jdk 和插件就不一一介绍了. Multiple SCMs 插件介绍:可以获取多个项目(如果你的项目中有依赖其他项目的) So ...
- java中高级并发SPI机制
Java SPI 实际上是“基于接口的编程+策略模式+配置文件”组合实现的动态加载机制. 适用于:调用者根据实际使用需要,启用.扩展.或者替换框架的实现策略. 要使用Java SPI,需要遵循如下约定 ...
- VMware上安装Kali Linux 超详细教程
一.下载镜像文件 下载好系统对应镜像文件 https://www.kali.org/downloads/ 二.创建新的虚拟机 1.创建新的虚拟机 我们使用自定义的配置方法. 2.添加镜像文件的路径 ...
- Theia APIs——事件
上一篇:Theia APIs——Preferences 事件 Theia中的事件或许会让你感到困惑,希望本节能阐述清楚. 来看下面的代码: (来自logger-watcher.ts) @injecta ...
- linux下安装cmake方法(2)---直接用命令安装
1.linux环境下打开网页,输入上网账号密码,确保已经联网 2.打开终端:输入cmake --version,如果出现版本号,表明已经安装,如果显示没有安装cmake,则需要安装 3.在终端里输入: ...
- 浏览器从输入url 到页面展示完成响应过程
用户从输入 url 到浏览器响应,呈现给用户的具体过程 1.用户在输入栏输入地址 (1) 如果有 beforeunload 事件会先执行判断继续还是跳出操作 (2) 浏览器进程识别是 地址还是关键字检 ...
- 有哪些让人相见恨晚的Python库(一)
对于我这个经常用python倒腾数据的人来说,下面这个库是真·相见恨晚 记得有一次我在服务器上处理数据时,为了解决Pandas读取超过2000W条数据就内存爆炸的问题,整整用了两天时间来优化.最后通过 ...
- MySQL UTF-8 常用字符排序规则
排序规则 解释 utf8_general_ci 不区分大小写 utf8_general_cs 区分大小写 utf8_bin 区分大小写,字符串每个字符串用二进制数据编译存储,且支持存储二进制数据
- Java单体应用 - Markdown - 01.简介
原文地址:http://www.work100.net/training/monolithic-markdown.html 更多教程:光束云 - 免费课程 简介 序号 文内章节 视频 1 概述 2 特 ...
- 04-String
动手动脑 请运行以下示例代码StringPool.java,查看其输出结果.如何解释这样的输出结果?从中你能总结出什么? s0,s1,s2字符串的内容相同,实际占用的是同一空间,引用的是同一个对象,所 ...