{"id":26606900,"url":"https://github.com/willibrandon/simplefiletransfer","last_synced_at":"2025-03-23T22:35:51.845Z","repository":{"id":282850131,"uuid":"949844722","full_name":"willibrandon/SimpleFileTransfer","owner":"willibrandon","description":null,"archived":false,"fork":false,"pushed_at":"2025-03-17T09:19:05.000Z","size":418,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-17T09:39:01.571Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/willibrandon.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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}},"created_at":"2025-03-17T08:28:17.000Z","updated_at":"2025-03-17T09:19:09.000Z","dependencies_parsed_at":"2025-03-17T09:49:22.587Z","dependency_job_id":null,"html_url":"https://github.com/willibrandon/SimpleFileTransfer","commit_stats":null,"previous_names":["willibrandon/simplefiletransfer"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/willibrandon%2FSimpleFileTransfer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/willibrandon%2FSimpleFileTransfer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/willibrandon%2FSimpleFileTransfer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/willibrandon%2FSimpleFileTransfer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/willibrandon","download_url":"https://codeload.github.com/willibrandon/SimpleFileTransfer/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245179615,"owners_count":20573506,"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","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-03-23T22:34:05.005Z","updated_at":"2025-03-23T22:35:51.831Z","avatar_url":"https://github.com/willibrandon.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Simple File Transfer\n\nA simple command-line file transfer utility that allows you to send and receive files over TCP/IP with support for compression, encryption, directory transfers, and more.\n\n## Building the Project\n\nMake sure you have .NET 9.0 SDK installed, then run:\n\n```bash\ndotnet build\n```\n\n## Running Tests\n\nThere are several ways to run the tests:\n\n### Using Visual Studio Test Explorer\n\nOpen the solution in Visual Studio and use the Test Explorer to run the tests.\n\n### Using PowerShell Script (Recommended)\n\nUse the provided PowerShell script to run tests with a timeout to prevent hanging:\n\n```powershell\n.\\scripts\\run-tests.ps1\n```\n\n### Using dotnet CLI\n\n```bash\ndotnet test\n```\n\nNote: Running tests directly with `dotnet test` may occasionally hang due to background processes. Use the PowerShell script if this happens.\n\n## Docker Support\n\nThe project includes Docker support for both the application and tests. Docker configuration files are located in the `docker` directory.\n\n### Building and Running with Docker\n\n```bash\n# Build the Docker image\ndocker-compose -f docker/docker-compose.yml build\n\n# Run the application in Docker\ndocker-compose -f docker/docker-compose.yml up simplefiletransfer\n```\n\n### Running Tests in Docker\n\n```bash\n# Build and run the tests in Docker\ndocker-compose -f docker/docker-compose.yml build simplefiletransfer.tests\ndocker run --rm simplefiletransfertests:latest\n```\n\nAlternatively, use the provided PowerShell script:\n\n```powershell\n.\\scripts\\run-tests-in-docker.ps1\n```\n\n## Usage\n\n### Receiving Files (Server Mode)\n\nTo start receiving files, run:\n\n```bash\ndotnet run receive\n```\n\nThis will start a server on port 9876 that listens for incoming file transfers.\n\nIf you need to receive encrypted files, provide the password:\n\n```bash\ndotnet run receive --password mysecretpassword\n```\n\n### Sending Files (Client Mode)\n\n#### Single File Transfer\n\nTo send a file to another computer, run:\n\n```bash\ndotnet run send \u003chost\u003e \u003cfilepath\u003e\n```\n\nWhere:\n- `\u003chost\u003e` is the IP address or hostname of the receiving computer\n- `\u003cfilepath\u003e` is the path to the file you want to send\n\nExample:\n```bash\ndotnet run send 192.168.1.100 myfile.txt\n```\n\n#### Multiple File Transfer\n\nTo send multiple files at once:\n\n```bash\ndotnet run send \u003chost\u003e \u003cfile1\u003e \u003cfile2\u003e \u003cfile3\u003e...\n```\n\nExample:\n```bash\ndotnet run send 192.168.1.100 file1.txt file2.txt file3.txt\n```\n\n#### Directory Transfer\n\nTo send an entire directory and its contents:\n\n```bash\ndotnet run send \u003chost\u003e \u003cdirectory_path\u003e\n```\n\nExample:\n```bash\ndotnet run send 192.168.1.100 mydirectory\n```\n\n### Transfer Options\n\nThe following options can be added to any send command:\n\n#### Compression\n\nUse GZip compression:\n```bash\ndotnet run send 192.168.1.100 myfile.txt --compress\n# or\ndotnet run send 192.168.1.100 myfile.txt --gzip\n```\n\nUse Brotli compression (better compression ratio):\n```bash\ndotnet run send 192.168.1.100 myfile.txt --brotli\n```\n\n#### Encryption\n\nEncrypt the data during transfer:\n```bash\ndotnet run send 192.168.1.100 myfile.txt --encrypt mysecretpassword\n```\n\n#### Resume Capability\n\nEnable resume capability for interrupted transfers:\n```bash\ndotnet run send 192.168.1.100 myfile.txt --resume\n```\n\nTo list all incomplete transfers that can be resumed:\n```bash\ndotnet run list-resume\n```\n\nTo resume a specific transfer:\n```bash\ndotnet run resume \u003cindex\u003e\n```\n\nExample:\n```bash\ndotnet run resume 1\n```\n\nIf the transfer is encrypted, provide the password:\n```bash\ndotnet run resume 1 --password mysecretpassword\n```\n\n### Transfer Queue\n\nYou can queue multiple transfers to be executed sequentially:\n\n```bash\ndotnet run send 192.168.1.100 myfile.txt --queue\n```\n\nQueue management commands:\n\n```bash\ndotnet run queue-list      # List all transfers in the queue\ndotnet run queue-start     # Start processing the queue\ndotnet run queue-stop      # Stop processing the queue\ndotnet run queue-clear     # Clear all transfers from the queue\n```\n\n## Features\n\n- Simple command-line interface\n- Progress bar showing transfer status\n- Automatic directory creation for received files\n- Error handling for common issues\n- Uses TCP/IP for reliable transfer\n- Supports files of any size\n- Shows transfer speed and progress percentage\n- Compression support (GZip and Brotli)\n- Encryption support for secure transfers\n- Directory transfers with automatic path preservation\n- Multiple file transfers in a single operation\n- Resume capability for interrupted transfers\n- Transfer queue for sequential processing\n- Hash verification to ensure data integrity\n- Docker support for both application and tests\n\n## Notes\n\n- The server runs on port 9876 by default\n- Press Ctrl+C to stop the server\n- Make sure the port is open in your firewall if needed\n- Received files are saved to a \"downloads\" directory by default\n- You can combine multiple options (e.g., `--brotli --encrypt password --resume`)\n\n## Web Interface\n\nSimpleFileTransfer includes a web interface for easy file transfers. To use the web interface:\n\n1. Start the SimpleFileTransfer API server:\n   ```\n   dotnet run --project src/SimpleFileTransfer/SimpleFileTransfer.csproj -- --web\n   ```\n\n2. Start the web application:\n   ```\n   cd src/simplefiletransfer.web\n   npm run dev\n   ```\n\n3. Open your browser and navigate to the URL shown in the console (typically http://localhost:5173)\n\n4. Use the web interface to transfer files with optional compression and encryption \n\n### Web Interface Features\n\nThe web interface provides a modern, user-friendly way to interact with SimpleFileTransfer:\n\n- **Transfer History**: View all current and past file transfers with detailed status information\n- **Server Management**: Start and stop the file transfer server directly from the web interface\n- **File Queue Management**: Add files to the transfer queue, start/stop queue processing, and clear the queue\n- **Received Files List**: Browse and download files that have been received by the server\n- **Transfer Options**: Configure compression, encryption, and speed limits through an intuitive interface\n- **WebSocket Communication**: Real-time updates using WebSocket technology for instant feedback\n- **Responsive Design**: Works on desktop and mobile devices with a responsive layout\n\n### Screenshots\n\n\u003cdiv align=\"center\"\u003e\n  \u003cp\u003e\u003cstrong\u003eServer Mode\u003c/strong\u003e\u003c/p\u003e\n  \u003cimg src=\"./screenshots/server-mode.png\" alt=\"Server Mode\" width=\"700\"/\u003e\n  \u003cbr\u003e\u003cbr\u003e\n  \u003cp\u003e\u003cstrong\u003eClient Mode\u003c/strong\u003e\u003c/p\u003e\n  \u003cimg src=\"./screenshots/client-mode.png\" alt=\"Client Mode\" width=\"700\"/\u003e\n\u003c/div\u003e ","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwillibrandon%2Fsimplefiletransfer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwillibrandon%2Fsimplefiletransfer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwillibrandon%2Fsimplefiletransfer/lists"}