如何实现自动化上传阿里云端对象存储

时间:2024-10-18 17:33:24

一、前言

用过阿里云平台的小伙伴相信大家都对阿里云的对象存储OSS都了解,这款产品对我们企业日常数据文件归档备份都起着至关重要的作用,本期就简单来了解一下,如何实现本地文件通过相应指令去实现文件的上传备份归档。

二、环境类别

本地mac上传

安装ossutil工具

#curl https://gosspublic.alicdn.com/ossutil/install.sh | sudo bash

如何实现自动化上传阿里云端对象存储_OSS对象存储

配置本地环境到云端OSS对象存储认证秘钥

#ossutil config 配置默认秘钥

如何实现自动化上传阿里云端对象存储_OSS对象存储_02

上传文件到指定文件目录

#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脚本自行计算签名,出现无法正常使用

如何实现自动化上传阿里云端对象存储_OSS对象存储_03