改进: 增强上传工具下载的可靠性和错误提示
问题背景: - 用户反馈SFTP模式下载上传工具失败,浏览器无反应 - 服务器日志显示: [上传工具] exe文件不存在 - 安装脚本显示"安装成功",但exe实际下载失败 - 原因:下载失败但脚本继续执行(return 0),用户未注意到警告 改进内容: 1. 添加重试机制 - 最多重试3次 - 每次失败后等待5秒 - 显示当前尝试次数 2. 增加超时时间 - wget: --timeout=300 (5分钟) - curl: --max-time 300 (5分钟) - 避免下载43MB文件时超时 3. 文件大小验证 - 下载前:检查现有文件大小,异常则重新下载 - 下载后:验证文件至少30MB(正常42MB) - 文件过小则删除并提示错误 4. 改进错误提示 - 下载中:显示文件大小和预计时间 - 失败时:列出可能的原因 - 提供手动下载链接和路径 5. 进度显示优化 - 显示当前尝试次数 - 显示文件大小(MB) - wget添加 --no-check-certificate 避免证书问题 测试场景: ✅ 正常下载(文件不存在) ✅ 跳过下载(文件已存在且大小正常) ✅ 重新下载(文件存在但大小异常) ✅ 网络失败重试(最多3次) ✅ 下载超时处理(5分钟超时) 用户体验: - 明确知道下载进度 - 失败时有详细的错误信息和解决方案 - 不会误以为安装成功但功能不可用 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
86
install.sh
86
install.sh
@@ -1286,11 +1286,18 @@ build_upload_tool() {
|
||||
|
||||
cd "${PROJECT_DIR}/upload-tool"
|
||||
|
||||
# 检查是否已存在可执行文件
|
||||
if [[ -f "dist/玩玩云上传工具.exe" ]] || [[ -f "dist/玩玩云上传工具" ]]; then
|
||||
print_success "上传工具已存在,跳过下载"
|
||||
echo ""
|
||||
return 0
|
||||
# 检查是否已存在可执行文件并验证大小
|
||||
if [[ -f "dist/玩玩云上传工具.exe" ]]; then
|
||||
FILE_SIZE=$(stat -f%z "dist/玩玩云上传工具.exe" 2>/dev/null || stat -c%s "dist/玩玩云上传工具.exe" 2>/dev/null || echo "0")
|
||||
if [[ $FILE_SIZE -gt 30000000 ]]; then
|
||||
FILE_SIZE_MB=$(( FILE_SIZE / 1024 / 1024 ))
|
||||
print_success "上传工具已存在(${FILE_SIZE_MB}MB),跳过下载"
|
||||
echo ""
|
||||
return 0
|
||||
else
|
||||
print_warning "现有文件大小异常(${FILE_SIZE}字节),重新下载..."
|
||||
rm -f "dist/玩玩云上传工具.exe"
|
||||
fi
|
||||
fi
|
||||
|
||||
# 创建dist目录
|
||||
@@ -1300,37 +1307,64 @@ build_upload_tool() {
|
||||
TOOL_DOWNLOAD_URL="http://a.haory.top/e/e82/玩玩云上传工具.exe"
|
||||
TOOL_FILENAME="玩玩云上传工具.exe"
|
||||
|
||||
print_info "正在下载上传工具..."
|
||||
print_info "正在下载上传工具(约43MB,可能需要1-2分钟)..."
|
||||
|
||||
# 尝试下载
|
||||
if command -v wget &> /dev/null; then
|
||||
wget -q --show-progress -O "dist/${TOOL_FILENAME}" "$TOOL_DOWNLOAD_URL" || {
|
||||
print_warning "上传工具下载失败"
|
||||
# 尝试下载(最多3次重试)
|
||||
DOWNLOAD_SUCCESS=false
|
||||
for attempt in 1 2 3; do
|
||||
print_info "尝试下载 ($attempt/3)..."
|
||||
|
||||
if command -v wget &> /dev/null; then
|
||||
# wget: 超时300秒,重试3次
|
||||
if wget --timeout=300 --tries=3 --no-check-certificate -q --show-progress -O "dist/${TOOL_FILENAME}" "$TOOL_DOWNLOAD_URL" 2>&1; then
|
||||
DOWNLOAD_SUCCESS=true
|
||||
break
|
||||
fi
|
||||
elif command -v curl &> /dev/null; then
|
||||
# curl: 连接超时60秒,总超时300秒
|
||||
if curl --connect-timeout 60 --max-time 300 -L -# -o "dist/${TOOL_FILENAME}" "$TOOL_DOWNLOAD_URL" 2>&1; then
|
||||
DOWNLOAD_SUCCESS=true
|
||||
break
|
||||
fi
|
||||
else
|
||||
print_warning "未找到wget或curl,无法下载上传工具"
|
||||
print_info "用户仍可使用网页上传(本地存储)或SFTP客户端"
|
||||
echo ""
|
||||
return 0
|
||||
}
|
||||
elif command -v curl &> /dev/null; then
|
||||
curl -L -o "dist/${TOOL_FILENAME}" "$TOOL_DOWNLOAD_URL" || {
|
||||
print_warning "上传工具下载失败"
|
||||
fi
|
||||
|
||||
# 如果不是最后一次尝试,等待后重试
|
||||
if [[ $attempt -lt 3 ]]; then
|
||||
print_warning "下载失败,5秒后重试..."
|
||||
sleep 5
|
||||
fi
|
||||
done
|
||||
|
||||
# 验证下载结果
|
||||
if [[ "$DOWNLOAD_SUCCESS" == "true" ]] && [[ -f "dist/${TOOL_FILENAME}" ]]; then
|
||||
FILE_SIZE=$(stat -f%z "dist/${TOOL_FILENAME}" 2>/dev/null || stat -c%s "dist/${TOOL_FILENAME}" 2>/dev/null || echo "0")
|
||||
FILE_SIZE_MB=$(( FILE_SIZE / 1024 / 1024 ))
|
||||
|
||||
if [[ $FILE_SIZE -gt 30000000 ]]; then
|
||||
print_success "上传工具下载完成: ${FILE_SIZE_MB}MB"
|
||||
echo ""
|
||||
else
|
||||
print_error "下载的文件大小异常(${FILE_SIZE}字节),可能下载不完整"
|
||||
rm -f "dist/${TOOL_FILENAME}"
|
||||
print_warning "可手动下载: ${TOOL_DOWNLOAD_URL}"
|
||||
print_info "用户仍可使用网页上传(本地存储)或SFTP客户端"
|
||||
echo ""
|
||||
return 0
|
||||
}
|
||||
fi
|
||||
else
|
||||
print_warning "未找到wget或curl,无法下载上传工具"
|
||||
print_error "上传工具下载失败(已重试3次)"
|
||||
print_warning "可能的原因:"
|
||||
echo " 1. 网络连接问题或下载速度过慢"
|
||||
echo " 2. CDN链接不可访问: ${TOOL_DOWNLOAD_URL}"
|
||||
echo " 3. 防火墙拦截HTTP连接"
|
||||
print_info "您可以稍后手动下载并放置到: ${PROJECT_DIR}/upload-tool/dist/"
|
||||
print_info "用户仍可使用网页上传(本地存储)或SFTP客户端"
|
||||
echo ""
|
||||
return 0
|
||||
fi
|
||||
|
||||
# 添加执行权限(Linux版本)
|
||||
if [[ "$TOOL_FILENAME" != *.exe ]]; then
|
||||
chmod +x "dist/${TOOL_FILENAME}"
|
||||
fi
|
||||
|
||||
print_success "上传工具下载完成: dist/${TOOL_FILENAME}"
|
||||
echo ""
|
||||
}
|
||||
|
||||
configure_nginx() {
|
||||
|
||||
Reference in New Issue
Block a user