Alist 是一个支持多种存储的文件列表程序,挂载各大网盘也是非常方便,在服务器内网部署一个alist 并且挂载各大网盘可实现将本地文件的备份和同步到云上。一般情况下的操作就是Alist 的webdav + rclone 的方式,不过 alist 的 webdav 协议遇到大文件会出现问题,但是通过正常的 http 上传就不会有太大的问题。alist api 上传文件的原理是先通过登录账号获取到token ,然后使用带有token的请求上传文件,token 可以通过网页登录的然后浏览器 F12 形式获取,不过这个获取的 token 有一定的时限,所以使用脚本自动化的形式自动获取并实现登录并上传。
脚本
新建一个脚本文件,如: xxx.sh
新建并编辑
Source Code
- vim xxx.sh
按 i
把以下脚本复制进去,之后按 esc
在按 :wq
保持并退出
Source Code
- #!/bin/bash
- # 检查参数数量
- if [ $# -ne 6 ]; then
- echo "Usage: $0 --username <username> --password <password> <local-file> <alist-url>"
- exit 1
- fi
- # 解析输入参数
- USERNAME=$2
- PASSWORD=$4
- LOCAL_FILE=$5
- REMOTE_PATH=$6
- # 从 URL 中提取 alist app 的 base URL
- BASE_URL=$(echo $REMOTE_PATH | sed -E 's|(https?://[^/]+).*|\1|')
- # 提取 URL 路径部分(去除 BASE_URL)
- REMOTE_FILE_PATH=$(echo $REMOTE_PATH | sed "s|$BASE_URL||")
- # 获取 token
- RESPONSE=$(curl --location --request POST "$BASE_URL/api/auth/login" \
- --header 'Content-Type: application/json' \
- --data-raw "{ \"username\": \"$USERNAME\", \"password\": \"$PASSWORD\" }")
- # 提取 token
- TOKEN=$(echo $RESPONSE | grep -o '"token":"[^"]*' | grep -o '[^"]*$')
- if [ -z "$TOKEN" ]; then
- echo "Error: Failed to get token"
- exit 1
- fi
- # 上传文件
- UPLOAD_URL="$BASE_URL/api/fs/put"
- curl -# -T "$LOCAL_FILE" "$UPLOAD_URL" \
- -H "Authorization: $TOKEN" \
- -H "File-Path: $REMOTE_FILE_PATH/$LOCAL_FILE"
- # 提示用户上传完成
- if [ $? -eq 0 ]; then
- echo "Upload successful!"
- else
- echo "Upload failed!"
- fi
复制 文本
脚本使用
为脚本赋予执行权限
Source Code
- chmod +x xxx.sh
运行脚本
Source Code
- ./xxx.sh --username <username> --password <password> <local-file> <alist-url>
替换 <>
中的内容,不保留 <>
, --username
和 --password
必须保留
<username>
alist 登录账号<password>
alist 登录密码<local-file>
本地需要上传的文件<ailst-url>
alist的地址,如:保存到/buckup
-https://127.0.0.1/buckup
,加上端口的话https://127.0.0.1:5244/buckup