一、前言
用过阿里云平台的小伙伴相信大家都对阿里云的对象存储OSS都了解,这款产品对我们企业日常数据文件归档备份都起着至关重要的作用,本期就简单来了解一下,如何实现本地文件通过相应指令去实现文件的上传备份归档。
二、环境类别
本地mac上传
安装ossutil工具
#curl https://gosspublic.alicdn.com/ossutil/install.sh | sudo bash
配置本地环境到云端OSS对象存储认证秘钥
#ossutil config 配置默认秘钥
上传文件到指定文件目录
#ossutil cp 【文件名】 oss://【存储空间名称】/【文件目录具体路径】/
Linux Centos系统上传
可通过curl进行上传备份,编写Shell脚本,可定期执行脚本
#!/bin/bash
NG=en_US.UTF-8
LANG=en_US.UTF-8
host="oss-cn-beijing.aliyuncs.com" #外网访问
#host="xxx.oss-cn-beijing.aliyuncs.com" #ECS内网访问
bucket="xxx"
Id="x.x.x.x.x.x"
Key="x.x.x.x.x.x"
# 参数1,PUT:上传,GET:下载
method=$1
# 参数2,上传时为本地源文件路径,下载时为oss源文件路径
source=$2
# 参数3,上传时为OSS目标文件路径,下载时为本地目标文件路径
dest=$3
osshost=$bucket.$host
# 校验method
if test -z "$method"
then
method=GET
fi
if [ "${method}"x = "get"x ] || [ "${method}"x = "GET"x ]
then
method=GET
elif [ "${method}"x = "put"x ] || [ "${method}"x = "PUT"x ]
then
method=PUT
else
method=GET
fi
#校验上传目标路径
if test -z "$dest"
then
dest=$source
fi
echo "method:"$method
echo "source:"$source
echo "dest:"$dest
#校验参数是否为空
if test -z "$method" || test -z "$source" || test -z "$dest"
then
echo $0 put localfile objectname
echo $0 get objectname localfile
exit -1
fi
if [ "${method}"x = "PUT"x ]
then
resource="/${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 $stringToSign
echo $signature
url=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}
else
resource="/${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
lANG=zh_CN.UTF-8
执行下述脚本,并指定需要上传的文件即可完成上传
#sh -x ./oss.sh put 【文件名称】 【OSS对象存储目录具体路径】/【文件名称】
三、知识拓展
对象存储还能想磁盘那样直接挂载到我们的ECS服务器上,这样我们的数据直接在线存储到上面,完全就不用数据拷贝的问题;
#vim /etc/passwd-ossfs
$bucket_name:$access_key_id:$access_key_secre
#ossfs 【存储空间名称】:【OSS存储目录】 【需要挂载本地目录】 -o rw,url=http://【Endpoint名称】,allow_other,dev,suid
四、遗留问题
这个脚本在Mac终端会出现403拒绝错误,根据阿里云反馈,Mac终端环境出现签名不匹配问题,导致的shell脚本自行计算签名,出现无法正常使用