diff --git a/install.sh b/install.sh index 931c6a1..5a9a0ee 100644 --- a/install.sh +++ b/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() {