2025-04-14 22:47:50 -04:00
2025-04-14 22:47:50 -04:00
2025-04-14 20:47:26 -04:00
2024-10-07 23:16:42 -04:00
2025-04-14 20:47:26 -04:00
2024-10-07 23:16:42 -04:00
2025-04-14 20:47:26 -04:00

Simple File Upload Server

A lightweight Flask-based file upload and download server with a modern UI. Perfect for temporary file sharing and mobile app log uploads.

Features

  • Clean, modern UI for file downloads
  • Mobile-friendly upload endpoint
  • Secure 6-digit alphanumeric code system
  • Automatic file cleanup
  • Configurable download limits and expiry times
  • User-friendly error pages
  • Docker support

Architecture

Built using the MVC design pattern:

  • Model: File metadata management (code, path, downloads, expiry)
  • View: Modern HTML templates with client-side validation
  • Controller: Upload/download logic with error handling

Getting Started

Local Development

# Create and activate virtual environment
python -m venv venv
source venv/bin/activate  # On Windows: venv\Scripts\activate

# Install dependencies
pip install -r requirements.txt

# Run the server
python src/app.py

Docker Deployment

# Build the image
docker build -t file-upload-server .

# Run the container
docker run -p 7777:7777 -v $(pwd)/tmp:/app/tmp file-upload-server

API Endpoints

POST /upload

Upload a file and receive a download code.

Form Fields:

  • file: File to upload (required)
  • max_downloads: Maximum download count (optional, default: 1)
  • expiry_hours: Hours until expiry (optional, default: 24, max: 24)

Response:

{
  "code": "ABC123"
}

GET /download/{code}

Download a file using a 6-character code.

Responses:

  • 200: File download starts
  • 404: File not found with specific error page for:
    • Invalid code
    • Expired file
    • Download limit reached
    • File no longer exists

Security Notes

  • Files are automatically deleted after:
    • Reaching download limit
    • Exceeding expiry time
    • Server restart (temporary storage)
  • No file execution permissions in upload directory
  • Secure filename handling

Configuration

All configuration is handled through environment variables:

  • UPLOAD_FOLDER: Upload directory path (default: tmp/uploads)
  • MAX_CONTENT_LENGTH: Maximum file size (default: 16MB)
  • DEBUG: Enable debug mode (default: False)

Contributing

  1. Fork the repository
  2. Create a feature branch
  3. Commit your changes
  4. Push to the branch
  5. Create a Pull Request
Description
No description provided
Readme 101 KiB
Languages
HTML 50.3%
Python 49.5%
Dockerfile 0.2%