fileshare/fileshare_functions.sh
2025-08-10 12:57:17 +08:00

250 lines
7.2 KiB
Bash
Executable File
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# 文件传输服务便捷函数
# 使用方法: source fileshare_functions.sh
# 默认服务器地址
FILESHARE_SERVER="${FILESHARE_SERVER:-http://localhost:8000}"
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# 显示帮助信息
fileshare_help() {
echo -e "${BLUE}📡 文件传输服务便捷函数${NC}"
echo "=================================="
echo
echo -e "${YELLOW}📤 上传文件:${NC}"
echo " upload <文件路径>"
echo " 示例: upload photo.jpg"
echo
echo -e "${YELLOW}📝 分享文本:${NC}"
echo " share_text <文本内容>"
echo " 示例: share_text \"Hello World!\""
echo
echo -e "${YELLOW}⬇️ 下载文件:${NC}"
echo " download <分享码>"
echo " 示例: download AB12CD34"
echo
echo -e "${YELLOW} 查看文件信息:${NC}"
echo " info <分享码>"
echo " 示例: info AB12CD34"
echo
echo -e "${YELLOW}📊 列出所有分享:${NC}"
echo " list_shares"
echo
echo -e "${YELLOW}🔧 设置服务器地址:${NC}"
echo " set_server <地址>"
echo " 示例: set_server https://your-domain.com"
echo
echo -e "${BLUE}当前服务器: ${FILESHARE_SERVER}${NC}"
}
# 上传文件
upload() {
if [ $# -eq 0 ]; then
echo -e "${RED}❌ 请指定要上传的文件${NC}"
echo "用法: upload <文件路径>"
return 1
fi
local file="$1"
if [ ! -f "$file" ]; then
echo -e "${RED}❌ 文件不存在: $file${NC}"
return 1
fi
echo -e "${BLUE}📤 上传文件: $file${NC}"
local result=$(curl -s -X POST -F "file=@$file" "$FILESHARE_SERVER/api/upload")
if echo "$result" | grep -q '"code"'; then
local code=$(echo "$result" | grep -o '"code":"[^"]*"' | cut -d'"' -f4)
echo -e "${GREEN}✅ 上传成功!${NC}"
echo -e "${YELLOW}分享码: $code${NC}"
echo -e "${BLUE}下载命令: download $code${NC}"
else
echo -e "${RED}❌ 上传失败${NC}"
echo "$result"
return 1
fi
}
# 分享文本
share_text() {
if [ $# -eq 0 ]; then
echo -e "${RED}❌ 请提供要分享的文本内容${NC}"
echo "用法: share_text \"文本内容\""
return 1
fi
local content="$*"
echo -e "${BLUE}📝 分享文本...${NC}"
local result=$(curl -s -X POST --data "$content" "$FILESHARE_SERVER/api/text")
if echo "$result" | grep -q '"code"'; then
local code=$(echo "$result" | grep -o '"code":"[^"]*"' | cut -d'"' -f4)
echo -e "${GREEN}✅ 分享成功!${NC}"
echo -e "${YELLOW}分享码: $code${NC}"
echo -e "${BLUE}下载命令: download $code${NC}"
else
echo -e "${RED}❌ 分享失败${NC}"
echo "$result"
return 1
fi
}
# 下载文件
download() {
if [ $# -eq 0 ]; then
echo -e "${RED}❌ 请提供分享码${NC}"
echo "用法: download <分享码>"
return 1
fi
local code="$1"
echo -e "${BLUE}⬇️ 下载文件: $code${NC}"
# 先检查文件信息
local info_result=$(curl -s "$FILESHARE_SERVER/api/info/$code")
if echo "$info_result" | grep -q '"filename"'; then
local filename=$(echo "$info_result" | grep -o '"filename":"[^"]*"' | cut -d'"' -f4)
echo -e "${BLUE}文件名: $filename${NC}"
# 下载文件
if curl -f -O -J "$FILESHARE_SERVER/api/download/$code"; then
echo -e "${GREEN}✅ 下载成功!${NC}"
else
echo -e "${RED}❌ 下载失败${NC}"
return 1
fi
else
echo -e "${RED}❌ 分享码不存在或已过期${NC}"
return 1
fi
}
# 查看文件信息
info() {
if [ $# -eq 0 ]; then
echo -e "${RED}❌ 请提供分享码${NC}"
echo "用法: info <分享码>"
return 1
fi
local code="$1"
echo -e "${BLUE} 查看文件信息: $code${NC}"
local result=$(curl -s "$FILESHARE_SERVER/api/info/$code")
if echo "$result" | grep -q '"filename"'; then
echo -e "${GREEN}✅ 文件信息:${NC}"
echo "$result" | python3 -m json.tool 2>/dev/null || echo "$result"
else
echo -e "${RED}❌ 分享码不存在或已过期${NC}"
return 1
fi
}
# 列出所有分享
list_shares() {
echo -e "${BLUE}📊 获取分享列表...${NC}"
local result=$(curl -s "$FILESHARE_SERVER/api/shares")
if echo "$result" | grep -q '"total"'; then
echo -e "${GREEN}✅ 分享列表:${NC}"
echo "$result" | python3 -m json.tool 2>/dev/null || echo "$result"
else
echo -e "${RED}❌ 获取列表失败${NC}"
echo "$result"
return 1
fi
}
# 设置服务器地址
set_server() {
if [ $# -eq 0 ]; then
echo -e "${YELLOW}当前服务器: $FILESHARE_SERVER${NC}"
echo "用法: set_server <服务器地址>"
return 0
fi
FILESHARE_SERVER="$1"
echo -e "${GREEN}✅ 服务器地址已设置为: $FILESHARE_SERVER${NC}"
# 测试连接
if curl -s "$FILESHARE_SERVER/api" > /dev/null; then
echo -e "${GREEN}✅ 服务器连接正常${NC}"
else
echo -e "${YELLOW}⚠️ 无法连接到服务器,请检查地址是否正确${NC}"
fi
}
# 从文件分享文本
share_file() {
if [ $# -eq 0 ]; then
echo -e "${RED}❌ 请指定要分享的文本文件${NC}"
echo "用法: share_file <文件路径>"
return 1
fi
local file="$1"
if [ ! -f "$file" ]; then
echo -e "${RED}❌ 文件不存在: $file${NC}"
return 1
fi
echo -e "${BLUE}📝 分享文件内容: $file${NC}"
local result=$(curl -s -X POST --data "@$file" "$FILESHARE_SERVER/api/text")
if echo "$result" | grep -q '"code"'; then
local code=$(echo "$result" | grep -o '"code":"[^"]*"' | cut -d'"' -f4)
echo -e "${GREEN}✅ 分享成功!${NC}"
echo -e "${YELLOW}分享码: $code${NC}"
echo -e "${BLUE}下载命令: download $code${NC}"
else
echo -e "${RED}❌ 分享失败${NC}"
echo "$result"
return 1
fi
}
# 批量上传
batch_upload() {
if [ $# -eq 0 ]; then
echo -e "${RED}❌ 请指定文件或目录${NC}"
echo "用法: batch_upload <文件1> <文件2> ... 或 batch_upload <目录>/*"
return 1
fi
echo -e "${BLUE}📤 批量上传文件...${NC}"
local success_count=0
local total_count=0
for file in "$@"; do
if [ -f "$file" ]; then
total_count=$((total_count + 1))
echo -e "\n${BLUE}上传: $(basename "$file")${NC}"
if upload "$file"; then
success_count=$((success_count + 1))
fi
fi
done
echo -e "\n${GREEN}✅ 批量上传完成: $success_count/$total_count 成功${NC}"
}
# 自动显示帮助
echo -e "${GREEN}✅ 文件传输服务便捷函数已加载${NC}"
echo -e "${BLUE}输入 fileshare_help 查看使用帮助${NC}"
echo -e "${YELLOW}服务器地址: $FILESHARE_SERVER${NC}"
# 创建别名
alias fs_help='fileshare_help'
alias fs_upload='upload'
alias fs_share='share_text'
alias fs_download='download'
alias fs_info='info'
alias fs_list='list_shares'
alias fs_server='set_server'