前提:
一般情況下對OSS操作都會通過SDK,但是很多情況下對OSS進行簡單的上傳下載的操作,那麼SDK就顯得有些臃腫,先要下載sdk包,然後再寫些簡單的操作腳本,而通過shell腳本就會簡單很多。
而且很多場景:線上網站、數據庫等,生產出來的網站數據、數據庫數據、日誌數據都需要來備份,如果備份再本地磁盤,那麼沒過多久磁盤空間就佔用光了,如果是NAS來備份數據,價格又比較貴,如果把數據備份到OSS 低頻存儲就比較實惠一些。
使用方法:
上傳文件到OSS:PUT
#!/bin/bash
host="oss-cn-shanghai.aliyuncs.com"
bucket="bucket名"
Id="AccessKey ID"
Key="Access Key Secret"
osshost=$bucket.$host
source="localfilename"
dest="objecetename"
resource="/${Bucket}/${dest}"
contentType=file -ib ${source} |awk -F ";" '{print $1}'
dateValue="TZ=GMT env LANG=en_US.UTF-8 date +'%a, %d %b %Y %H:%M:%S GMT'
"
stringToSign="PUT\n\n${contentType}\n${dateValue}\n${resource}"
signature=echo -en $stringToSign | openssl sha1 -hmac ${Key} -binary | base64
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}
下載OSS的文件:GET
#!/bin/bash
host="oss-cn-shanghai.aliyuncs.com"
bucket="bucket名"
Id="AccessKey ID"
Key="Access Key Secret"
osshost=$bucket.$host
source="objecetename"
dest="localfilename"
resource="/${bucket}/${source}"
contentType=""
dateValue="TZ=GMT env LANG=en_US.UTF-8 date +'%a, %d %b %Y %H:%M:%S GMT'
"
stringToSign="GET\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}