first commit
This commit is contained in:
Executable
+104
@@ -0,0 +1,104 @@
|
||||
#!/bin/bash
|
||||
|
||||
# 七牛云上传脚本
|
||||
# 需要环境变量: QINIU_ACCESS_KEY, QINIU_SECRET_KEY
|
||||
|
||||
# 检查环境变量
|
||||
if [[ -z "$QINIU_ACCESS_KEY" ]] || [[ -z "$QINIU_SECRET_KEY" ]]; then
|
||||
echo "错误: 请设置环境变量 QINIU_ACCESS_KEY 和 QINIU_SECRET_KEY"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 硬编码存储空间和域名
|
||||
BUCKET="$QINIU_BUCKET"
|
||||
QINIU_DOMAIN="$QINIU_DOMAIN"
|
||||
|
||||
# 参数检查
|
||||
if [[ $# -lt 1 ]]; then
|
||||
echo "使用方法: $0 <文件路径> [文件名(可选,默认使用原文件名)]"
|
||||
echo "示例: $0 ./image.jpg"
|
||||
echo " $0 ./image.jpg newname.jpg"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
FILE_PATH="$1"
|
||||
KEY="${2:-$(basename "$FILE_PATH")}"
|
||||
|
||||
# 检查文件是否存在
|
||||
if [[ ! -f "$FILE_PATH" ]]; then
|
||||
echo "错误: 文件不存在: $FILE_PATH"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 七牛云API配置 - 华南广东区域
|
||||
QINIU_UPLOAD_URL="https://up-z2.qiniup.com"
|
||||
|
||||
# 生成上传凭证的函数
|
||||
generate_upload_token() {
|
||||
local bucket="$1"
|
||||
local key="$2"
|
||||
local deadline=$(($(date +%s) + 3600)) # 凭证1小时后过期(仅影响上传,不影响文件存储)
|
||||
|
||||
# 构建上传策略 - 只使用bucket作为scope(允许上传到任意文件名)
|
||||
local scope="${bucket}"
|
||||
local put_policy="{\"scope\":\"${scope}\",\"deadline\":${deadline}}"
|
||||
|
||||
# Base64编码上传策略(按照七牛云官方文档:先base64,再替换+/为-_,policy需要去掉=)
|
||||
local encoded_put_policy=$(echo -n "$put_policy" | base64 | tr '+/' '-_' | tr -d '=')
|
||||
|
||||
# 使用HMAC-SHA1签名(对编码后的策略进行签名)
|
||||
# 注意:签名的base64编码不去掉=号!
|
||||
local sign=$(echo -n "$encoded_put_policy" | openssl dgst -sha1 -hmac "$QINIU_SECRET_KEY" -binary | base64 | tr '+/' '-_')
|
||||
|
||||
# 生成上传凭证
|
||||
echo "${QINIU_ACCESS_KEY}:${sign}:${encoded_put_policy}"
|
||||
}
|
||||
|
||||
# 生成上传凭证
|
||||
echo "正在生成上传凭证..."
|
||||
UPLOAD_TOKEN=$(generate_upload_token "$BUCKET" "$KEY")
|
||||
|
||||
# 上传文件
|
||||
echo "正在上传文件: $FILE_PATH 到 $QINIU_BUCKET/$KEY"
|
||||
RESPONSE=$(curl -s -X POST \
|
||||
-F "token=${UPLOAD_TOKEN}" \
|
||||
-F "key=${KEY}" \
|
||||
-F "file=@${FILE_PATH}" \
|
||||
"${QINIU_UPLOAD_URL}")
|
||||
|
||||
# 检查响应
|
||||
if [[ $? -eq 0 ]]; then
|
||||
# 检查是否包含错误
|
||||
if echo "$RESPONSE" | grep -q "error"; then
|
||||
echo "上传失败:"
|
||||
echo "$RESPONSE" | python3 -m json.tool 2>/dev/null || echo "$RESPONSE"
|
||||
exit 1
|
||||
else
|
||||
echo "上传成功!"
|
||||
|
||||
# 尝试解析并显示文件信息
|
||||
if command -v python3 &> /dev/null; then
|
||||
echo "$RESPONSE" | python3 -c "
|
||||
import json, sys
|
||||
try:
|
||||
data = json.load(sys.stdin)
|
||||
print(f\"文件名: {data.get('key', 'N/A')}\")
|
||||
print(f\"Hash: {data.get('hash', 'N/A')}\")
|
||||
except:
|
||||
pass
|
||||
" 2>/dev/null
|
||||
fi
|
||||
|
||||
# 显示下载地址
|
||||
DOWNLOAD_URL="${QINIU_DOMAIN}/${KEY}"
|
||||
echo ""
|
||||
echo "下载地址: ${DOWNLOAD_URL}"
|
||||
echo ""
|
||||
|
||||
# 返回下载地址给调用者
|
||||
echo "${DOWNLOAD_URL}" > /tmp/qiniu_upload_url.txt
|
||||
fi
|
||||
else
|
||||
echo "上传失败: 网络请求错误"
|
||||
exit 1
|
||||
fi
|
||||
Reference in New Issue
Block a user