# UPFS - Upload File to Server 一个用于向UPFS服务器上传文件的Rust命令行工具,现在支持实时进度跟踪和上传速度显示。 ## 功能特性 - ✅ 文件上传到远程服务器 - ✅ 用户认证(用户名/密码) - ✅ **新增**: 实时上传进度跟踪 - ✅ **新增**: 上传速度计算和显示 - ✅ **新增**: 剩余时间估算 - ✅ **新增**: 可视化进度条 - ✅ **新增**: 灵活的进度回调API ## 安装 ```bash git clone cd upfs cargo build --release ``` ## 使用方法 ### 基本用法 ```bash ./upfs -f <文件路径> -r <远程路径> -u <用户名> -p <密码> ``` ### 示例 ```bash # 上传文件(默认显示进度) ./upfs -f ./large_file.zip -r /backup/large_file.zip -u admin -p mypassword # 上传文件(不带密码参数,会交互式输入) ./upfs -f ./document.pdf -r /documents/doc.pdf -u admin ``` ## 进度显示格式 默认情况下,所有上传都会显示实时的上传进度: ``` [=========> ] 45.2% | 2.3 MB/s | 12s | 预计剩余 14s | 4.5 MB/10.0 MB ``` 进度条包含以下信息: - **进度条**: 可视化显示上传进度 - **百分比**: 当前的完成百分比 - **速度**: 当前上传速度(B/s, KB/s, MB/s, GB/s) - **已用时间**: 从开始上传到现在的时间 - **剩余时间**: 预计完成上传还需要的时间 - **已上传/总大小**: 已上传的数据量和总文件大小 ## API 使用 ### 基本上传 ```rust use upfs::update::upload_file; // 直接上传,不显示进度 let result = upload_file(token, "file.txt", "/remote/path.txt").await?; ``` ### 带进度回调的上传 ```rust use upfs::update::{upload_file_with_progress, UploadProgress}; // 带进度跟踪的上传 let result = upload_file_with_progress( token, "large_file.zip", "/remote/large_file.zip", |progress| { println!("进度: {:.1}%", progress.percentage); println!("速度: {}", progress.format_speed()); println!("剩余时间: {}", progress.format_remaining_time()); } ).await?; ``` ### UploadProgress 结构体 ```rust pub struct UploadProgress { pub bytes_uploaded: u64, // 已上传字节数 pub total_bytes: u64, // 总字节数 pub percentage: f64, // 完成百分比 (0.0-100.0) pub speed_bps: f64, // 上传速度(字节/秒) pub elapsed_time: Duration, // 已用时间 } ``` ### UploadProgress 方法 - `format_speed()`: 格式化速度显示(如 "2.3 MB/s") - `format_bytes()`: 格式化字节大小(如 "10.5 MB") - `format_elapsed_time()`: 格式化已用时间(如 "2m 15s") - `format_remaining_time()`: 格式化剩余时间(如 "预计剩余 1m 30s") - `estimate_remaining_time()`: 估算剩余时间 ## 命令行参数 | 参数 | 简写 | 长参数 | 描述 | 默认值 | |------|------|--------|------|--------| | 文件路径 | `-f` | `--file` | 要上传的文件路径 | 必需 | | 远程路径 | `-r` | `--remote-path` | 服务器上的远程路径 | 必需 | | 用户名 | `-u` | `--username` | 认证用户名 | "admin" | | 密码 | `-p` | `--password` | 认证密码 | 可选(交互式输入) | ## 示例程序 查看 `examples/progress_demo.rs` 获取完整的使用示例: ```bash cargo run --example progress_demo ``` ## 开发和构建 ```bash # 检查代码 cargo check # 运行测试 cargo test # 构建发布版本 cargo build --release # 运行示例 cargo run --example progress_demo ``` ## 技术细节 - 使用 `reqwest` 进行HTTP请求 - 使用 `multipart/form-data` 上传文件 - 使用异步I/O和流式处理实现进度跟踪 - 支持大文件上传(分块读取) - 实时计算上传速度和剩余时间 ## 贡献 欢迎提交Issue和Pull Request来改进这个项目!