A professional C# (.NET 8+) Azure Blob Storage downloader application with advanced features for reliable large file downloads.
- Azure Blob Storage Integration: Full support for Azure Blob Storage with multiple authentication methods
- Chunked Downloads: Configurable chunk size (default: 4MB) for efficient large file handling
- Parallel Processing: Concurrent chunk downloads using ThreadPool and Task Parallel Library
- Pausable/Resumable: Downloads can be paused and resumed at any time
- State Persistence: SQLite database tracks download progress and enables recovery after application restart
- Retry Logic: Exponential backoff retry policy for failed chunks using Polly
- Circuit Breaker: Network instability protection with configurable failure thresholds
- Checksum Validation: MD5 checksum verification for downloaded chunks and complete files
- Error Handling: Comprehensive error handling and logging
- Concurrent Access: Thread-safe state management for multiple simultaneous downloads
- Connection String: Traditional Azure Storage connection string authentication
- Managed Identity: Azure Active Directory Managed Identity support for secure, credential-free authentication
- DefaultAzureCredential: Automatic credential discovery in Azure environments
- Public Blob Access: Direct HTTPS URLs for publicly accessible blobs (no authentication required)
- Interactive Console: Rich console interface using Spectre.Console
- WPF GUI Application: Cross-platform graphical interface with Fluent UI design and dark theme support
- Multi-language Support: English and Georgian language support with easy language switching
- Real-time Progress: Live progress reporting with download speed and ETA
- Multiple Downloads: Manage multiple concurrent downloads
- Download Management: Start, pause, resume, cancel, and monitor downloads
{
"ConnectionStrings": {
"AzureStorage": "DefaultEndpointsProtocol=https;AccountName=myaccount;AccountKey=mykey;EndpointSuffix=core.windows.net"
}
}{
"AzureStorage": {
"AccountUrl": "https://mystorageaccount.blob.core.windows.net"
}
}For publicly accessible blobs, leave both ConnectionStrings:AzureStorage and AzureStorage:AccountUrl empty or unset:
{
"ConnectionStrings": {
"AzureStorage": ""
},
"AzureStorage": {
"AccountUrl": ""
}
}Then use direct HTTPS URLs like:
https://mystorageaccount.blob.core.windows.net/public-container/file.ziphttps://mydomain.com/files/document.pdf(if using custom domain)
{
"DownloadConfiguration": {
"ChunkSizeBytes": 4194304, // 4MB chunks
"MaxParallelDownloads": 4, // Maximum concurrent downloads
"MaxRetryAttempts": 3, // Retry attempts per chunk
"RetryDelay": "00:00:01", // Base retry delay
"CircuitBreakerTimeout": "00:05:00", // Circuit breaker timeout
"CircuitBreakerFailureThreshold": 5, // Failures before opening circuit
"DatabasePath": "downloads.db" // SQLite database path
}
}dotnet run --project src/Codex365Downloader.Consoledotnet run --project src/Codex365Downloader.WPFThe WPF GUI provides a user-friendly graphical interface with:
- Modern Fluent UI design
- Real-time progress bars and statistics
- File browser for easy location selection
- Concurrent download management
- Cross-platform support (Windows, macOS, Linux)
See WPF GUI README for detailed usage instructions.
- Start New Download: Enter blob URL and local file path
- View Downloads: See all downloads with status and progress
- Pause Download: Temporarily halt an active download
- Resume Download: Continue a paused download from where it left off
- Cancel Download: Stop and remove a download
Set configuration via environment variables:
export ConnectionStrings__AzureStorage="your-connection-string"
export AzureStorage__AccountUrl="https://youraccount.blob.core.windows.net"
export DownloadConfiguration__ChunkSizeBytes=8388608src/
├── Codex365Downloader.Core/ # Core business logic
│ ├── Models/ # Data models
│ ├── Interfaces/ # Service interfaces
│ ├── Services/ # Core services
│ ├── Data/ # Data access layer
│ └── Extensions/ # Dependency injection extensions
├── Codex365Downloader.Console/ # Console application
├── Codex365Downloader.WPF/ # WPF GUI application
│ ├── ViewModels/ # MVVM ViewModels
│ ├── Views/ # XAML Views
│ └── README.md # GUI-specific documentation
└── tests/
└── Codex365Downloader.Tests/ # Unit and integration tests
Main orchestrator for download operations:
- Manages download lifecycle
- Coordinates chunked downloads
- Handles parallel processing
- Implements retry logic
Azure Blob Storage integration:
- Blob size retrieval
- Chunk-based downloads
- Connection string and Managed Identity support
Persistent state management:
- Download metadata storage
- Chunk completion tracking
- Recovery support
Network resilience:
- Failure threshold monitoring
- Automatic circuit opening/closing
- Protection against cascading failures
dotnet test- Core download logic validation
- State persistence verification
- Circuit breaker functionality
- Checksum calculation accuracy
- Azure.Storage.Blobs: Azure Blob Storage client
- Azure.Identity: Azure authentication
- Microsoft.Data.Sqlite: SQLite data access
- Polly: Resilience and retry patterns
- Spectre.Console: Rich console interface
- Avalonia: Cross-platform .NET UI framework
- CommunityToolkit.Mvvm: MVVM helpers and source generators
- xUnit: Testing framework
- Moq: Mocking framework
- Optimized for files >1GB
- Memory-efficient streaming
- Configurable chunk sizes
- Parallel processing
- Concurrent chunk downloads
- Retry logic for network failures
- Circuit breaker for stability
- Progress reporting without blocking
- Proper disposal of streams and connections
- Semaphore-controlled concurrency
- Memory-efficient chunk processing
- No hardcoded credentials
- Managed Identity support
- Secure credential storage
- Environment variable configuration
- MD5 checksum validation
- Chunk-level verification
- File integrity checks
- Error detection and recovery
# Install .NET 8 Runtime
# Configure Managed Identity
# Set environment variables
dotnet Codex365Downloader.Console.dllFROM mcr.microsoft.com/dotnet/runtime:8.0
COPY . /app
WORKDIR /app
ENTRYPOINT ["dotnet", "Codex365Downloader.Console.dll"]The WPF GUI application supports multiple languages:
- English (en): Default language
- Georgian (ka): ქართული ენა
- Use the language selector in the top-right corner of the application
- Changes take effect immediately without restarting
See Localization Guide for detailed instructions on:
- Adding new language support
- Translating UI strings
- Testing localization
- Fork the repository
- Create a feature branch
- Add tests for new functionality
- Ensure all tests pass
- Submit a pull request
This project is licensed under the MIT License - see the LICENSE file for details.
For questions, issues, or feature requests, please open an issue on GitHub.