脚本文件如下:
#!/bin/bash
# OSS 凭据和终端
ACCESS_KEY_ID="your-access-key-id"
ACCESS_KEY_SECRET="your-access-key-secret"
ENDPOINT="your-bucket-endpoint"
BUCKET_NAME="your-bucket-name"
# 文件路径
FILE_PATH="/path/to/your/file"
FILE_NAME=$(basename $FILE_PATH)
# 资源标识
RESOURCE="/${BUCKET_NAME}/${FILE_NAME}"
CONTENT_TYPE="application/octet-stream"
DATE_VALUE=$(date -Ru)
STRING_TO_SIGN="PUT\n\n${CONTENT_TYPE}\n${DATE_VALUE}\n${RESOURCE}"
SIGNATURE=$(echo -en $STRING_TO_SIGN | openssl sha1 -hmac $ACCESS_KEY_SECRET -binary | base64)
# 上传文件
curl -X PUT -T "${FILE_PATH}" \
-H "Host: ${BUCKET_NAME}.${ENDPOINT}" \
-H "Date: ${DATE_VALUE}" \
-H "Content-Type: ${CONTENT_TYPE}" \
-H "Authorization: OSS ${ACCESS_KEY_ID}:${SIGNATURE}" \
"http://${BUCKET_NAME}.${ENDPOINT}/${FILE_NAME}"
如果想知道是否上传成功,可以修改为
# 上传文件
Http_response=$(curl -w "%{http_code}" -X PUT -T "${FILE_PATH}" \
-H "Host: ${BUCKET_NAME}.${ENDPOINT}" \
-H "Date: ${DATE_VALUE}" \
-H "Content-Type: ${CONTENT_TYPE}" \
-H "Authorization: OSS ${ACCESS_KEY_ID}:${SIGNATURE}" \
"http://${BUCKET_NAME}.${ENDPOINT}/${FILE_NAME}")
if [ "Http_response" -eq 200 ]; then
ehco "upload sucess"
else
echo "upload failed"
fi
备注
如果出现错误: DATE_VALUE=$(date -Ru)改为
DATE_VALUE=$(TZ=GMT date +"%a, %d %b %Y %H:%M:%S %z")