为什么80%的码农都做不了架构师?>>>   

Linux环境Shell脚本上传下载阿里云OSS文件

背景

工作中由于我们项目生成的日志文件比较重要,而本地磁盘空间有限存储不了多久,因此考虑备份方案,我们原本打算保存在nas上,然而由于各种原因与运维沟通下来建议保存到oss上面。

由于linux原生支持shell,而网上大多数方案基于python-sdk,因此我们为了减少依赖,考虑直接使用shell脚本上传OSS,网上找了些资料,参见:

  • https://bbs.aliyun.com/read/233456.html

然而脚本试用下来有坑,特地记录一下:

  1. 字符比较提示异常

上面截图字符比较会提示:

./oss.sh: 13: ./oss.sh: [get: not found
./oss.sh: 16: ./oss.sh: [put: not found
./oss.sh: 32: ./oss.sh: [put: not found

应该改成上面的格式

2.拼接url的时候把bucket也带进去了。 3.拼接签名不对,研究了很久发现不应该用“#!/bin/sh”,而需要使用“#!/bin/bash”,这是个大坑。。。

修改版本

下面给出修改版本,需要自取:

#!/bin/bashhost="oss-cn-shanghai.aliyuncs.com"
bucket="bucket名"
Id="AccessKey ID"
Key="Access Key Secret"
# 参数1,PUT:上传,GET:下载
method=$1
# 参数2,上传时为本地源文件路径,下载时为oss源文件路径
source=$2
# 参数3,上传时为OSS目标文件路径,下载时为本地目标文件路径
dest=$3osshost=$bucket.$host# 校验method
if test -z "$method"
thenmethod=GET
fiif [ "${method}"x = "get"x ] || [ "${method}"x = "GET"x ]
thenmethod=GET
elif [ "${method}"x = "put"x ] || [ "${method}"x = "PUT"x ]
thenmethod=PUT
elsemethod=GET
fi#校验上传目标路径
if test -z "$dest"
thendest=$source
fiecho "method:"$method
echo "source:"$source
echo "dest:"$dest#校验参数是否为空
if test -z "$method" || test -z "$source" || test -z "$dest"
thenecho $0 put localfile objectnameecho $0 get objectname localfileexit -1
fiif [ "${method}"x = "PUT"x ]
thenresource="/${bucket}/${dest}"contentType=`file -ib ${source} |awk -F ";" '{print $1}'`dateValue="`TZ=GMT date +'%a, %d %b %Y %H:%M:%S GMT'`"stringToSign="${method}\n\n${contentType}\n${dateValue}\n${resource}"signature=`echo -en $stringToSign | openssl sha1 -hmac ${Key} -binary | base64`echo $stringToSignecho $signatureurl=http://${osshost}/${dest}echo "upload ${source} to ${url}"curl -i -q -X PUT -T "${source}" \-H "Host: ${osshost}" \-H "Date: ${dateValue}" \-H "Content-Type: ${contentType}" \-H "Authorization: OSS ${Id}:${signature}" \${url}
elseresource="/${bucket}/${source}"contentType=""dateValue="`TZ=GMT date +'%a, %d %b %Y %H:%M:%S GMT'`"stringToSign="${method}\n\n${contentType}\n${dateValue}\n${resource}"signature=`echo -en ${stringToSign} | openssl sha1 -hmac ${Key} -binary | base64`url=http://${osshost}/${source}echo "download ${url} to ${dest}"curl --create-dirs \-H "Host: ${osshost}" \-H "Date: ${dateValue}" \-H "Content-Type: ${contentType}" \-H "Authorization: OSS ${Id}:${signature}" \${url} -o ${dest}
fi

执行命令:

#上传
$ ./oss.sh put a.gz c.gz#下载
$ ./oss.sh get c.gz d.gz

2018-11-21更新:

今天看到阿里云提供ossutil64,详见:https://help.aliyun.com/document_detail/50452.html 有了这个方便很多。

转载于:https://my.oschina.net/tree/blog/2396104

Linux环境Shell脚本上传下载阿里云OSS文件相关推荐

  1. PHP如何下载微信语音到服务器,并将amr格式转换为MP3格式,最后上传到阿里云oss文件中

    第一步:下载微信语音到服务器中 废话不多说,直接上代码 1.总的流程方法(里面的方法在下面) 2.下载微信语音的方法 3.将微信语音的amr格式转换为MP3格式(需要使用FFmpeg,安装使用过程请看 ...

  2. linux centos8 将指定本地目录下的文件上传到阿里云OSS上

    使用场景:为了解决高并发问题,尤其带宽限制(阿里云最高200M,当前首页一个用户请求4M的资源,导致带宽跟不上),jenkins打包vue下的前端静态资源上传到阿里云OSS上 前提工作:因工具是jav ...

  3. 微信头像下载并上传到阿里云OSS,PHP文件上传到阿里云OSS简单代码(OSS文件上传,微信头像下载,CURL下载文件,微信头像链接过期)

    (就这么个小事,有多少公司多少项目没做到!!) 微信公众号项目,后端获取到授权用户的微信头像后,要自行下载保存,不下载的话,微信返回的头像链接会在一段时间后过期,无法访问! 下面是我写的两个简单实用方 ...

  4. mysql数据库备份到oss_备份MySQL数据库并上传到阿里云OSS存储

    1. 环境配置 要将本地文件上传到阿里云oss中, 必须使用阿里云提供的工具 ossutil, 有32位,也有64位的, Linux和Windows都有.具体可以到阿里云官网下载 本文以Linux系统 ...

  5. mysql数据库备份到oss_备份数据库并上传至阿里云OSS

    下载OSS工具ossutil wget http://gosspublic.alicdn.com/ossutil/1.5.0/ossutil64 #下载ossutil chmod 755 ossuti ...

  6. 图片文件压缩并上传至阿里云OSS

    图片处理 Thumbnails 在进行Java开发时可以使用Thumbnails工具类对图片进行处理,旋转.裁剪.格式转换.加水印等. 使用步骤 导包 <dependency><gr ...

  7. java通过URL获取网络文件并上传到阿里云OSS文件服务器

    首先,先从网络上读取到文件 /*** 从网络Url中读取文件* @param urlStr 文件URL地址* @throws IOException*/public String downLoadFr ...

  8. Java 常用工具类(9) : 图片上传至阿里云OSS

    阿里云OSS工具类 加强版 : https://blog.csdn.net/Lxinccode/article/details/79698259 import java.io.ByteArrayInp ...

  9. Android从相册中选取图片上传到阿里云OSS

    在开发APP软件中,boss突然提出想在软件中添加一个多张照片上传的功能,作为菜鸟的我,琢磨了两天,才弄出来,今天特地贴出来.本篇博客主要介绍的是将本地图片上传到服务器的方法技巧.主要技术点是: 一. ...

最新文章

  1. 铁甲雄心机器人建造成本_玄武10移动抓取机器人帮助解决具有挑战性的任务
  2. java反序列化 构造函数_FastJson反序列化和构造函数之间的一点小秘密
  3. Nacos(五)之Spring集成
  4. html 选中状态,html默认选中状态
  5. mysql10.3修改默认存储路径
  6. 对于大家族Sring这些你究竟了解吗
  7. Model1和Model2区别
  8. UVA-10817- Headmaster's Headache(状压DP)
  9. 当前时间加30分钟_男性早晨坚持慢跑30分钟,一段时间后,或许这些变化不请自来...
  10. 《Fluid Engine Development》 学习笔记3-光滑粒子流体动力学
  11. Taro小程序分享功能
  12. 亚马逊用AI监控和解雇员工,这会是大势所趋吗?
  13. 【2021最新】各大公司招聘官网链接汇总(持续更新中)
  14. 关于两个模块同时使用Arduino Mega硬串口问题
  15. 超实用一看就懂!汽车常用配件的更换周期
  16. 价格奥秘-在超市遇见亚当斯密--第二章 谁在决定一支铅笔的价格?
  17. POJ1036 Gangsters
  18. 智力题(真尼玛有意思!!!)
  19. Powershell知识点1:开启脚本限制 报错:无法加载文件,因为在此系统中禁止执行脚本
  20. React面试题(2)

热门文章

  1. python 检测文件或文件夹是否存在
  2. Windows10下安装unbuntu双系统 以及花屏解决办法
  3. Python入门 Python自学路线 Python如何学习
  4. 人群密度估计--Learning a perspective-embedded deconvolution network for crowd counting
  5. Amazon AWS云计算服务平台概述
  6. Linux初学(Linux命令行的使用)
  7. html 颜色叠加图片,如何在背景图片上添加颜色叠加?
  8. java流类图结构_java I/O 流总结
  9. @Profile-根据不同环境注入bean
  10. 阿里云视频点播获取视频点播的video信息