first commit
This commit is contained in:
commit
e00a8f4847
8
.gitignore
vendored
Normal file
8
.gitignore
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
.vscode
|
||||
output
|
||||
libasound_module_pcm_cdsp.so
|
||||
runtime.yml
|
||||
wall
|
||||
.envrc
|
||||
*.tar.*
|
||||
files
|
||||
7
ansible.cfg
Normal file
7
ansible.cfg
Normal file
@ -0,0 +1,7 @@
|
||||
[defaults]
|
||||
host_key_checking = False
|
||||
timeout = 30
|
||||
gathering = smart
|
||||
fact_caching = memory
|
||||
|
||||
|
||||
74
compress_and_upload_files.sh
Executable file
74
compress_and_upload_files.sh
Executable file
@ -0,0 +1,74 @@
|
||||
#!/bin/bash
|
||||
|
||||
# 压缩并上传files目录到七牛云
|
||||
# 需要环境变量: QINIU_ACCESS_KEY, QINIU_SECRET_KEY
|
||||
|
||||
set -e
|
||||
|
||||
# 检查环境变量
|
||||
if [[ -z "$QINIU_ACCESS_KEY" ]] || [[ -z "$QINIU_SECRET_KEY" ]]; then
|
||||
echo "错误: 请设置环境变量 QINIU_ACCESS_KEY 和 QINIU_SECRET_KEY"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 检查files目录是否存在
|
||||
if [[ ! -d "files" ]]; then
|
||||
echo "错误: files目录不存在"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 生成带时间戳的文件名
|
||||
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
|
||||
ARCHIVE_NAME="files_${TIMESTAMP}.tar.xz"
|
||||
|
||||
echo "正在压缩files目录(使用xz最高压缩)..."
|
||||
|
||||
# 使用tar进行最大压缩
|
||||
# -cJf: 创建xz压缩文件(最高压缩率)
|
||||
# --exclude: 排除不需要的文件
|
||||
tar -cJf "$ARCHIVE_NAME" \
|
||||
--exclude='._*' \
|
||||
files/
|
||||
|
||||
# 获取压缩后的文件大小
|
||||
FILE_SIZE=$(ls -lh "$ARCHIVE_NAME" | awk '{print $5}')
|
||||
echo "压缩完成: $ARCHIVE_NAME (大小: $FILE_SIZE)"
|
||||
|
||||
# 文件已经使用xz压缩,无需额外处理
|
||||
|
||||
echo ""
|
||||
echo "正在上传到七牛云..."
|
||||
|
||||
# 调用上传脚本
|
||||
if [[ -f "./upload_to_qiniu.sh" ]]; then
|
||||
./upload_to_qiniu.sh "$ARCHIVE_NAME"
|
||||
|
||||
# 从临时文件读取下载地址
|
||||
if [[ -f "/tmp/qiniu_upload_url.txt" ]]; then
|
||||
DOWNLOAD_URL=$(cat /tmp/qiniu_upload_url.txt)
|
||||
|
||||
# 写入下载地址到files_download.txt
|
||||
echo "$DOWNLOAD_URL" > files_download.txt
|
||||
|
||||
echo ""
|
||||
echo "=================================="
|
||||
echo "上传成功!"
|
||||
echo "文件名: $ARCHIVE_NAME"
|
||||
echo "下载地址已保存到: files_download.txt"
|
||||
echo "下载地址: $DOWNLOAD_URL"
|
||||
echo "=================================="
|
||||
|
||||
# 清理临时文件
|
||||
rm -f /tmp/qiniu_upload_url.txt
|
||||
else
|
||||
echo "警告: 无法获取下载地址"
|
||||
fi
|
||||
else
|
||||
echo "错误: upload_to_qiniu.sh 脚本不存在"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 询问是否删除本地压缩文件
|
||||
echo "remove $ARCHIVE_NAME"
|
||||
rm "$ARCHIVE_NAME"
|
||||
exit 0
|
||||
1
files_download.txt
Normal file
1
files_download.txt
Normal file
@ -0,0 +1 @@
|
||||
http://xplayer-ota.pureroad.cn/files_20250806_175127.tar.xz
|
||||
3
init.sh
Executable file
3
init.sh
Executable file
@ -0,0 +1,3 @@
|
||||
apt-get update -y
|
||||
apt-get install ansible-core -y
|
||||
ansible-playbook playbooks/site.yml -e force_update=true
|
||||
25
ota
Executable file
25
ota
Executable file
@ -0,0 +1,25 @@
|
||||
#!/bin/bash
|
||||
cd /root/xplayer-ota
|
||||
git restore .
|
||||
git pull
|
||||
|
||||
# Download and extract files before running ansible-playbook
|
||||
if [ -f "files_download.txt" ]; then
|
||||
echo "Downloading files from files_download.txt..."
|
||||
while IFS= read -r url; do
|
||||
if [ -n "$url" ]; then
|
||||
filename=$(basename "$url")
|
||||
echo "Downloading $filename..."
|
||||
wget -O "$filename" "$url"
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "Extracting $filename..."
|
||||
tar -xJf "$filename"
|
||||
rm -f "$filename"
|
||||
else
|
||||
echo "Failed to download $url"
|
||||
fi
|
||||
fi
|
||||
done < files_download.txt
|
||||
fi
|
||||
|
||||
ansible-playbook playbooks/site.yml
|
||||
394
playbooks/site.yml
Normal file
394
playbooks/site.yml
Normal file
@ -0,0 +1,394 @@
|
||||
- name: Configure Xplayer Server
|
||||
hosts: localhost
|
||||
become: yes
|
||||
|
||||
tasks:
|
||||
|
||||
- name: switch mirror
|
||||
copy:
|
||||
src: ../files/sources.list.d/
|
||||
dest: /etc/apt/sources.list.d/
|
||||
mode: '0644'
|
||||
tags: apt
|
||||
|
||||
- name: Update apt cache
|
||||
apt:
|
||||
update_cache: yes
|
||||
cache_valid_time: 3600
|
||||
become: yes
|
||||
tags: apt
|
||||
|
||||
- name: install dependencies
|
||||
apt:
|
||||
name:
|
||||
- bluez
|
||||
- mpc
|
||||
- libasound2-dev
|
||||
- libudev-dev
|
||||
- libfmt-dev
|
||||
- libfmt9
|
||||
- libchromaprint1
|
||||
- libupnp17
|
||||
- libnfs14
|
||||
- libavutil58
|
||||
- libavformat60
|
||||
- libavcodec60
|
||||
- libcdio-paranoia2
|
||||
- libcdio-cdda2
|
||||
- libcdio19
|
||||
- libmms0
|
||||
- libsoxr0
|
||||
- libid3tag0
|
||||
- libiso9660-11
|
||||
- libzzip-0-13
|
||||
- libao4
|
||||
- libjack-jackd2-0
|
||||
- libpipewire-0.3-0
|
||||
- libpulse0
|
||||
- libshout3
|
||||
- libsndio7.0
|
||||
- libopenal1
|
||||
- libavahi-common3
|
||||
- libavahi-client3
|
||||
- libadplug-2.3.3-0
|
||||
- libflac12
|
||||
- libfluidsynth3
|
||||
- libaudiofile1
|
||||
- libfaad2
|
||||
- libgme0
|
||||
- libmad0
|
||||
- libmikmod3
|
||||
- libmodplug1
|
||||
- libmpcdec6
|
||||
- libmpg123-0
|
||||
- libopus0
|
||||
- libsndfile1
|
||||
- libogg0
|
||||
- libvorbis0a
|
||||
- libwavpack1
|
||||
- libwildmidi2
|
||||
- libvorbisenc2
|
||||
- libmp3lame0
|
||||
- libtwolame0
|
||||
- libshine3
|
||||
- libmp3lame0
|
||||
- libtwolame0
|
||||
- net-tools
|
||||
- libconfig9
|
||||
- avahi-daemon
|
||||
# - upmpdcli
|
||||
state: present
|
||||
become: yes
|
||||
tags: apt
|
||||
|
||||
- name: Copy static files
|
||||
copy:
|
||||
src: "{{ item.src }}"
|
||||
dest: "{{ item.dest }}"
|
||||
mode: "{{ item.mode | default('0644') }}"
|
||||
loop:
|
||||
- src: ../files/modules
|
||||
dest: /etc/modules
|
||||
- src: ../files/login
|
||||
dest: /srv/
|
||||
- src: ../files/sshd_config
|
||||
dest: /etc/ssh/sshd_config
|
||||
mode: '0600'
|
||||
- src: ../files/authorized_keys
|
||||
dest: /root/.ssh/authorized_keys
|
||||
mode: '0600'
|
||||
- src: ../files/asound.conf
|
||||
dest: /etc/asound.conf
|
||||
- src: ../files/start_service.sh
|
||||
dest: /etc/custom_service/start_service.sh
|
||||
mode: '0755'
|
||||
- src: ../files/ota
|
||||
dest: /usr/bin/ota
|
||||
mode: '0755'
|
||||
- src: ../files/snd-aloop.conf
|
||||
dest: /etc/modprobe.d/snd-aloop.conf
|
||||
mode: '0644'
|
||||
- src: ../files/cpufrequtils
|
||||
dest: /etc/default/cpufrequtils
|
||||
mode: '0644'
|
||||
|
||||
- name: Create directories
|
||||
file:
|
||||
path: "{{ item.path }}"
|
||||
state: directory
|
||||
mode: "{{ item.mode | default('0755') }}"
|
||||
loop:
|
||||
- path: /var/lib/mpd/playlists
|
||||
- path: /var/lib/mpd/music
|
||||
- path: /usr/local/lib/systemd/system
|
||||
|
||||
- name: update mpd data
|
||||
copy:
|
||||
src: "{{ item.src }}"
|
||||
dest: "{{ item.dest }}"
|
||||
mode: "{{ item.mode | default('0644') }}"
|
||||
loop:
|
||||
- src: ../files/mpd.conf
|
||||
dest: /etc/mpd.conf
|
||||
- src: ../files/mpd.service
|
||||
dest: /usr/local/lib/systemd/system/mpd.service
|
||||
- src: ../files/mpd
|
||||
dest: /usr/local/bin/mpd
|
||||
mode: '0755'
|
||||
- src: ../files/mpd.socket
|
||||
dest: /usr/local/lib/systemd/system/mpd.socket
|
||||
tags: mpd
|
||||
notify:
|
||||
- reload_systemd
|
||||
- enable_mpd
|
||||
- restart_mpd
|
||||
register: copy_result
|
||||
changed_when: copy_result.changed or (force_update | default(false) | bool)
|
||||
|
||||
|
||||
- name: update bluetooth
|
||||
copy:
|
||||
src: "{{ item.src }}"
|
||||
dest: "{{ item.dest }}"
|
||||
mode: "{{ item.mode | default('0644') }}"
|
||||
loop:
|
||||
- src: ../files/bluetooth.service
|
||||
dest: /usr/lib/systemd/system/bluetooth.service
|
||||
- src: ../files/main.conf
|
||||
dest: /etc/bluetooth/main.conf
|
||||
- src: ../files/input.conf
|
||||
dest: /etc/bluetooth/input.conf
|
||||
tags: bluetooth
|
||||
notify:
|
||||
- reload_systemd
|
||||
- enable_bluetooth
|
||||
- stop_bluetooth
|
||||
- start_bluetooth
|
||||
register: copy_result
|
||||
changed_when: copy_result.changed or (force_update | default(false) | bool)
|
||||
|
||||
- name: update camilladsp
|
||||
copy:
|
||||
src: "{{ item.src }}"
|
||||
dest: "{{ item.dest }}"
|
||||
mode: "{{ item.mode | default('0644') }}"
|
||||
loop:
|
||||
- src: ../files/camilladsp.service
|
||||
dest: /etc/systemd/system/camilladsp.service
|
||||
- src: ../files/camilladsp-conf
|
||||
dest: /root/
|
||||
- src: ../files/camilladsp
|
||||
dest: /usr/local/bin/camilladsp
|
||||
mode: '0755'
|
||||
notify:
|
||||
- reload_systemd
|
||||
- enable_camilladsp
|
||||
- restart_camilladsp
|
||||
register: copy_result
|
||||
changed_when: copy_result.changed or (force_update | default(false) | bool)
|
||||
tags: camilladsp
|
||||
|
||||
# - name: update upmpdcli
|
||||
# copy:
|
||||
# src: "{{ item.src }}"
|
||||
# dest: "{{ item.dest }}"
|
||||
# mode: "{{ item.mode | default('0644') }}"
|
||||
# loop:
|
||||
# - src: ../files/upmpdcli.conf
|
||||
# dest: /etc/upmpdcli.conf
|
||||
|
||||
- name: update usb-mount
|
||||
copy:
|
||||
src: "{{ item.src }}"
|
||||
dest: "{{ item.dest }}"
|
||||
mode: "{{ item.mode | default('0644') }}"
|
||||
loop:
|
||||
- src: ../files/usb-mount.sh
|
||||
dest: /usr/local/bin/usb-mount.sh
|
||||
mode: '0755'
|
||||
- src: ../files/99-usb-auto-mount.rules
|
||||
dest: /etc/udev/rules.d/99-usb-auto-mount.rules
|
||||
mode: '0644'
|
||||
tags: usb
|
||||
notify:
|
||||
- reload_udev
|
||||
register: copy_result
|
||||
changed_when: copy_result.changed or (force_update | default(false) | bool)
|
||||
|
||||
- name: update network-tools
|
||||
copy:
|
||||
src: "{{ item.src }}"
|
||||
dest: "{{ item.dest }}"
|
||||
mode: "{{ item.mode | default('0644') }}"
|
||||
loop:
|
||||
- src: ../files/sing-box
|
||||
dest: /usr/bin/sing-box
|
||||
mode: '0755'
|
||||
- src: ../files/sing-box.service
|
||||
dest: /etc/systemd/system/sing-box.service
|
||||
mode: '0644'
|
||||
tags: network-tools
|
||||
notify:
|
||||
- reload_systemd
|
||||
- enable_sing-box
|
||||
- start_sing-box
|
||||
- restart_sing-box
|
||||
register: copy_result
|
||||
changed_when: copy_result.changed or (force_update | default(false) | bool)
|
||||
|
||||
- name: update shairport-sync
|
||||
copy:
|
||||
src: "{{ item.src }}"
|
||||
dest: "{{ item.dest }}"
|
||||
mode: "{{ item.mode | default('0644') }}"
|
||||
loop:
|
||||
- src: ../files/shairport-sync.conf
|
||||
dest: /etc/shairport-sync.conf
|
||||
- src: ../files/shairport-sync
|
||||
dest: /usr/local/bin/shairport-sync
|
||||
mode: '0755'
|
||||
- src: ../files/shairport-sync.service
|
||||
dest: /usr/lib/systemd/system/shairport-sync.service
|
||||
- src: ../files/shairport_monitor.sh
|
||||
dest: /usr/bin/shairport_monitor.sh
|
||||
mode: '0755'
|
||||
notify:
|
||||
- reload_systemd
|
||||
- enable_shairport_sync
|
||||
- start_shairport_sync
|
||||
|
||||
- name: update xplayer-server
|
||||
copy:
|
||||
src: "{{ item.src }}"
|
||||
dest: "{{ item.dest }}"
|
||||
mode: "{{ item.mode | default('0644') }}"
|
||||
loop:
|
||||
- src: ../files/xplayer-server.service
|
||||
dest: /etc/systemd/system/xplayer-server.service
|
||||
mode: '0644'
|
||||
- src: ../files/server
|
||||
dest: /usr/local/bin/server
|
||||
mode: '0755'
|
||||
notify:
|
||||
- reload_systemd
|
||||
- enable_xplayer_server
|
||||
- start_xplayer_server
|
||||
- restart_xplayer_server
|
||||
register: copy_result
|
||||
changed_when: copy_result.changed or (force_update | default(false) | bool)
|
||||
|
||||
- name: Update firmware
|
||||
copy:
|
||||
src: /lib/firmware/ap6276p/
|
||||
dest: /lib/firmware/ap6275p/
|
||||
remote_src: yes
|
||||
|
||||
handlers:
|
||||
- name: cleanup_packages
|
||||
apt:
|
||||
autoremove: yes
|
||||
autoclean: yes
|
||||
|
||||
- name: restart_ssh
|
||||
shell:
|
||||
cmd: systemctl restart ssh
|
||||
|
||||
- name: reload_systemd
|
||||
shell:
|
||||
cmd: systemctl daemon-reload
|
||||
|
||||
- name: enable_bluetooth
|
||||
shell:
|
||||
cmd: systemctl enable bluetooth
|
||||
- name: stop_bluetooth
|
||||
shell:
|
||||
cmd: systemctl stop bluetooth
|
||||
|
||||
- name: start_bluetooth
|
||||
shell:
|
||||
cmd: systemctl start bluetooth
|
||||
|
||||
- name: enable_mpd
|
||||
shell:
|
||||
cmd: systemctl enable mpd
|
||||
|
||||
- name: stop_mpd
|
||||
shell:
|
||||
cmd: systemctl stop mpd
|
||||
|
||||
- name: start_mpd
|
||||
shell:
|
||||
cmd: systemctl start mpd
|
||||
|
||||
- name: restart_mpd
|
||||
shell:
|
||||
cmd: systemctl restart mpd
|
||||
- name: enable_camilladsp
|
||||
shell:
|
||||
cmd: systemctl enable camilladsp
|
||||
|
||||
- name: stop_camilladsp
|
||||
shell:
|
||||
cmd: systemctl stop camilladsp
|
||||
|
||||
|
||||
- name: start_camilladsp
|
||||
shell:
|
||||
cmd: systemctl start camilladsp
|
||||
|
||||
|
||||
- name: restart_camilladsp
|
||||
shell:
|
||||
cmd: systemctl restart camilladsp
|
||||
|
||||
- name: restart_upmpdcli
|
||||
shell:
|
||||
cmd: systemctl restart upmpdcli
|
||||
|
||||
- name: reload_udev
|
||||
shell:
|
||||
cmd: udevadm control --reload-rules && udevadm trigger
|
||||
|
||||
- name: enable_shairport_sync
|
||||
shell:
|
||||
cmd: systemctl enable shairport-sync
|
||||
|
||||
- name: stop_shairport_sync
|
||||
shell:
|
||||
cmd: systemctl stop shairport-sync
|
||||
|
||||
- name: start_shairport_sync
|
||||
shell:
|
||||
cmd: systemctl start shairport-sync
|
||||
|
||||
- name: restart_shairport_sync
|
||||
shell:
|
||||
cmd: systemctl restart shairport-sync
|
||||
|
||||
- name: enable_xplayer_server
|
||||
shell:
|
||||
cmd: systemctl enable xplayer-server
|
||||
|
||||
- name: start_xplayer_server
|
||||
shell:
|
||||
cmd: systemctl start xplayer-server
|
||||
|
||||
- name: restart_xplayer_server
|
||||
shell:
|
||||
cmd: systemctl restart xplayer-server
|
||||
|
||||
- name: reboot_required
|
||||
shell:
|
||||
cmd: echo "need reboot"
|
||||
|
||||
- name: enable_sing-box
|
||||
shell:
|
||||
cmd: systemctl enable sing-box
|
||||
|
||||
- name: start_sing-box
|
||||
shell:
|
||||
cmd: systemctl start sing-box
|
||||
|
||||
- name: restart_sing-box
|
||||
shell:
|
||||
cmd: systemctl restart sing-box
|
||||
33
sync.sh
Executable file
33
sync.sh
Executable file
@ -0,0 +1,33 @@
|
||||
mkdir -p files
|
||||
rsync am60:/etc/ssh/sshd_config files/sshd_config
|
||||
rsync am60:/root/.ssh/authorized_keys files/authorized_keys
|
||||
rsync am60:/etc/asound.conf files/asound.conf
|
||||
rsync am60:/usr/local/bin/camilladsp files/camilladsp
|
||||
rsync -avz am60:/root/camilladsp-conf files/
|
||||
rsync am60:/usr/local/lib/systemd/system/mpd.socket files/mpd.socket
|
||||
rsync am60:/usr/local/lib/systemd/system/mpd.service files/mpd.service
|
||||
rsync am60:/usr/local/bin/mpd files/mpd
|
||||
rsync am60:/etc/mpd.conf files/mpd.conf
|
||||
rsync am60:/etc/systemd/system/xplayer-server.service files/xplayer-server.service
|
||||
rsync am60:/usr/local/bin/server files/server
|
||||
rsync am60:/usr/bin/ota files/ota
|
||||
rsync -avz am60:/etc/apt/sources.list.d ./files/
|
||||
rsync am60:/etc/modules files/modules
|
||||
rsync am60:/etc/modprobe.d/snd-aloop.conf files/snd-aloop.conf
|
||||
rsync am60:/etc/systemd/system/camilladsp.service files/camilladsp.service
|
||||
rsync am60:/usr/lib/systemd/system/bluetooth.service files/bluetooth.service
|
||||
rsync am60:/etc/udev/rules.d/99-usb-auto-mount.rules files/99-usb-auto-mount.rules
|
||||
rsync am60:/usr/local/bin/usb-mount.sh files/usb-mount.sh
|
||||
rsync am60:/etc/custom_service/start_service.sh files/start_service.sh
|
||||
rsync am60:/etc/bluetooth/input.conf files/input.conf
|
||||
rsync am60:/etc/bluetooth/main.conf files/main.conf
|
||||
rsync am60:/etc/default/cpufrequtils files/cpufrequtils
|
||||
rsync am60:/usr/lib/systemd/system/shairport-sync.service files/shairport-sync.service
|
||||
rsync am60:/usr/local/bin/shairport-sync files/shairport-sync
|
||||
rsync am60:/etc/shairport-sync.conf files/shairport-sync.conf
|
||||
rsync am60:/usr/bin/shairport_monitor.sh files/shairport_monitor.sh
|
||||
rsync am60:/etc/upmpdcli.conf files/upmpdcli.conf
|
||||
rsync am60:/usr/bin/sing-box files/sing-box
|
||||
rsync am60:/etc/systemd/system/sing-box.service files/sing-box.service
|
||||
rsync -avz am60:/srv/login files/login
|
||||
echo "done"
|
||||
104
upload_to_qiniu.sh
Executable file
104
upload_to_qiniu.sh
Executable file
@ -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
|
||||
Loading…
x
Reference in New Issue
Block a user