{"id":30217766,"url":"https://github.com/easzlab/ezft","last_synced_at":"2025-08-14T05:42:38.363Z","repository":{"id":309169899,"uuid":"1035259270","full_name":"easzlab/ezft","owner":"easzlab","description":"EZFT (Easy File Transfer) is a high-performance file transfer tool written in Go that supports both client download and server functionality. It features concurrent downloads, resume capability, progress tracking, and efficient file serving.","archived":false,"fork":false,"pushed_at":"2025-08-10T08:48:52.000Z","size":62,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-08-10T10:23:18.433Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/easzlab.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-08-10T02:13:15.000Z","updated_at":"2025-08-10T08:45:07.000Z","dependencies_parsed_at":"2025-08-10T10:23:20.510Z","dependency_job_id":"8b8724d5-c904-44c5-9db3-37fbaa698927","html_url":"https://github.com/easzlab/ezft","commit_stats":null,"previous_names":["easzlab/ezft"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/easzlab/ezft","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/easzlab%2Fezft","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/easzlab%2Fezft/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/easzlab%2Fezft/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/easzlab%2Fezft/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/easzlab","download_url":"https://codeload.github.com/easzlab/ezft/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/easzlab%2Fezft/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":270370408,"owners_count":24572299,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-14T02:00:10.309Z","response_time":75,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-08-14T05:42:34.543Z","updated_at":"2025-08-14T05:42:38.348Z","avatar_url":"https://github.com/easzlab.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# EZFT - Easy File Transfer\n\n[![Go Version](https://img.shields.io/badge/Go-1.24.4-blue.svg)](https://golang.org/)\n[![Version](https://img.shields.io/badge/version-0.2.2-green.svg)](https://github.com/easzlab/ezft)\n[![License](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)\n\nEZFT (Easy File Transfer) is a high-performance file transfer tool written in Go that supports both client download and server functionality. It features concurrent downloads, resume capability, progress tracking, and efficient file serving.\n\n## Features\n\n### Client Features\n- **High-Performance Concurrent Downloads**: Multi-threaded downloading with configurable concurrency\n- **Resume Download Support**: Automatic resume from interruption points\n- **Progress Tracking**: Real-time download progress display with visual progress bar\n- **Auto Chunking**: Intelligent chunk size calculation for optimal performance\n- **Retry Mechanism**: Configurable retry count for failed downloads\n- **Range Request Support**: Efficient partial content downloads\n- **Signal Handling**: Graceful interruption handling (Ctrl+C)\n\n### Server Features\n- **High-Performance File Server**: Efficient HTTP-based file serving\n- **Range Request Support**: Partial content delivery for resume downloads\n- **Multi-Client Support**: Concurrent client handling\n- **Logging Middleware**: Request logging and monitoring\n- **Directory Management**: Automatic directory creation and management\n\n## Installation\n\n### From Source\n```bash\ngit clone https://github.com/easzlab/ezft.git\ncd ezft\ngo build -o build/ezft cmd/main.go\n```\n\n### Using Go Install\n```bash\ngo install github.com/easzlab/ezft@latest\n```\n\n## Usage\n\n### Server Mode\n\nStart a file server to serve files from a directory:\n\n```bash\n# Start server on default port 8080 serving current directory\n./ezft server\n\n# Start server on custom port serving specific directory\n./ezft server --port 9000 --dir /path/to/files\n\n# Short form\n./ezft server -p 9000 -d /path/to/files\n```\n\n**Server Options:**\n- `--port, -p`: Server port (default: 8080)\n- `--dir, -d`: Root directory to serve files from (default: current directory)\n\n### Client Mode\n\nDownload files with high performance and resume capability:\n\n```bash\n# Basic download\n./ezft client --url http://example.com/file.zip\n\n# Download with custom output path\n./ezft client --url http://example.com/file.zip --output /path/to/save/file.zip\n\n# High-performance concurrent download\n./ezft client --url http://example.com/file.zip --concurrency 8 --chunk-size 2097152\n\n# Download with custom settings\n./ezft client \\\n  --url http://example.com/file.zip \\\n  --output downloads/file.zip \\\n  --concurrency 4 \\\n  --chunk-size 1048576 \\\n  --retry 5 \\\n  --progress\n```\n\n**Client Options:**\n- `--url, -u`: Download URL (required)\n- `--output, -o`: Output file path (default: down/filename)\n- `--concurrency, -c`: Number of concurrent connections (default: 1)\n- `--chunk-size, -s`: Chunk size in bytes (default: 1048576 = 1MB)\n- `--retry, -r`: Retry count for failed downloads (default: 3)\n- `--resume`: Enable resume download (default: true)\n- `--auto-chunk`: Enable automatic chunk size calculation (default: true)\n- `--progress, -p`: Show download progress (default: true)\n\n### Global Options\n\n```bash\n# Show version information\n./ezft --version\n\n# Show help\n./ezft --help\n./ezft client --help\n./ezft server --help\n```\n\n## Examples\n\n### Example 1: Basic File Server\n```bash\n# Start server serving files from /var/www/files on port 8080\n./ezft server --dir /var/www/files --port 8080\n```\n\n### Example 2: High-Performance Download\n```bash\n# Download large file with 8 concurrent connections\n./ezft client \\\n  --url http://localhost:8080/largefile.iso \\\n  --concurrency 8 \\\n  --chunk-size 2097152 \\\n  --output downloads/largefile.iso\n```\n\n### Example 3: Resume Interrupted Download\n```bash\n# If download was interrupted, simply run the same command again\n# EZFT will automatically detect and resume from the last position\n./ezft client --url http://example.com/file.zip --output file.zip\n```\n\n## Architecture\n\n### Project Structure\n```\nezft/\n├── cmd/\n│   ├── main.go          # Main entry point\n│   ├── client/          # Client command implementation\n│   └── server/          # Server command implementation\n├── pkg/\n│   ├── client/          # Client core functionality\n│   │   ├── client.go    # Main client logic\n│   │   ├── basic.go     # Basic download\n│   │   ├── concurrent.go # Concurrent download\n│   │   ├── resume.go    # Resume functionality\n│   │   └── chunk.go     # Chunk management\n│   ├── server/          # Server core functionality\n│   │   ├── server.go    # HTTP server implementation\n│   │   └── midware.go   # Logging middleware\n│   └── utils/           # Utility functions\n├── internal/\n│   └── config/          # Configuration and version management\n└── tests/               # Test files\n```\n\n### Key Components\n\n1. **CLI Framework**: Built with Cobra for robust command-line interface\n2. **HTTP Client**: Custom HTTP client with timeout and connection management\n3. **Concurrent Downloads**: Goroutine-based concurrent chunk downloading\n4. **Resume Logic**: JSON-based failed chunk tracking and recovery\n5. **Progress Display**: Real-time progress bar with speed calculation\n6. **File Server**: HTTP-based file server with Range request support\n\n## Performance Features\n\n- **Concurrent Downloads**: Multiple goroutines download different chunks simultaneously\n- **Intelligent Chunking**: Automatic chunk size calculation based on file size\n- **Connection Pooling**: Efficient HTTP connection reuse\n- **Memory Efficient**: Streaming downloads without loading entire files into memory\n- **Resume Capability**: Failed chunk tracking and automatic recovery\n\n## Requirements\n\n- Go 1.24.4 or later\n- Network connectivity for downloads\n- Sufficient disk space for downloaded files\n\n## Contributing\n\n1. Fork the repository\n2. Create your feature branch (`git checkout -b feature/amazing-feature`)\n3. Commit your changes (`git commit -m 'Add some amazing feature'`)\n4. Push to the branch (`git push origin feature/amazing-feature`)\n5. Open a Pull Request\n\n## License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n## Support\n\nIf you encounter any issues or have questions, please open an issue on the [GitHub repository](https://github.com/easzlab/ezft/issues).","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feaszlab%2Fezft","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Feaszlab%2Fezft","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feaszlab%2Fezft/lists"}