深浅模式
sh
#!/bin/bash
# ==================== Config ====================
host="oss-cn-guangzhou.aliyuncs.com"
bucket="hougen"
id=""
key=""
cloudFolder=""
# ================================================
declare -a result=()
encodeFilename=""
function upload(){
timestamp=$(date +%s)
urlencode "$timestamp-$(basename "$1")"
cloudDir="$cloudFolder/$encodeFilename"
contentType=`file -b --mime-type "$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/$bucket/$cloudFolder/$encodeFilename"
signature=`echo -en "$stringToSign" | openssl sha1 -hmac "$key" -binary | base64`
curl -i -q -X PUT -T "$1" \
-H "Host: $bucket.$host" \
-H "Date: $dateValue" \
-H "Content-Type: $contentType" \
-H "Authorization: OSS $id:$signature" \
https://"$bucket"."$host"/"$cloudDir"
result+=(https://"$bucket"."$host"/"$cloudDir")
}
function urlencode() {
encodeFilename=""
local length="${#1}"
for (( i = 0; i < length; i++ ))
do
local c="${1:i:1}"
case $c in
[a-zA-Z0-9.~_-])
encodeFilename=$encodeFilename$(printf "$c")
;;
*)
encodeFilename=$encodeFilename$(printf "$c" | xxd -p -c1 |
while read x
do
printf "%%%s" "$x"
done)
esac
done
}
for var in "$@"
do
newFile=""
case "$OSTYPE" in
msys*)
newFile=`echo "${var##*/}" | sed 's/[ ][ ]*/_/g'` ;;
*)
newFile="${var%/*}/"`echo "${var##*/}" | sed 's/[ ][ ]*/_/g'`
esac
mv "$var" "$newFile"
upload "$newFile"
done
for res in "${result[@]}"
do
echo "$res"
done