Greirson Lee-Thorp 8ab70f45c8 feat: enhance file upload progress tracking and user experience
- Add detailed upload progress tracking with speed and time remaining
- Implement dynamic waiting messages during upload initialization
- Create utility functions for file size and speed formatting
- Improve progress bar UI with more informative status details
- Add interval-based speed and progress updates for smoother UI
2025-02-04 17:00:31 -08:00
2025-01-22 13:10:59 -06:00
2025-01-22 12:36:38 -06:00
2025-01-22 14:00:46 -06:00
2025-01-31 21:39:35 -08:00
2025-01-22 14:00:46 -06:00
2025-01-22 14:00:46 -06:00
2025-01-22 12:36:38 -06:00
2025-01-25 17:33:39 -06:00

Dumb Drop

A stupid simple file upload application that provides a clean, modern interface for dragging and dropping files. Built with Node.js and vanilla JavaScript.

image

No auth (unless you want it now!), no storage, no nothing. Just a simple file uploader to drop dumb files into a dumb folder.

Features

  • Drag and drop file uploads
  • Multiple file selection
  • Clean, responsive UI
  • File size display
  • Docker support
  • Dark Mode toggle
  • Configurable file size limits
  • Drag and Drop Directory Support (Maintains file structure in upload)
  • Optional PIN protection (4-10 digits) with secure validation
  • Configurable notifications via Apprise
  • Custom notification messages with filename templating

Environment Variables

Variable Description Default Required
PORT Server port 3000 No
MAX_FILE_SIZE Maximum file size in MB 1024 No
DUMBDROP_PIN PIN protection (4-10 digits) None No
DUMBDROP_TITLE Site title displayed in header DumbDrop No
APPRISE_URL Apprise URL for notifications None No
APPRISE_MESSAGE Notification message template New file uploaded {filename} ({size}), Storage used {storage} No
APPRISE_SIZE_UNIT Size unit for notifications Auto No

Notification Templates

The notification message supports the following placeholders:

  • {filename}: Name of the uploaded file
  • {size}: Size of the file (formatted according to APPRISE_SIZE_UNIT)
  • {storage}: Total size of all files in upload directory

Example message template:

APPRISE_MESSAGE: New file uploaded {filename} ({size}), Storage used {storage}

Size formatting examples:

  • Auto (default): Chooses nearest unit (e.g., "1.44MB", "256KB")
  • Fixed unit: Set APPRISE_SIZE_UNIT to B, KB, MB, GB, or TB

Both {size} and {storage} use the same formatting rules based on APPRISE_SIZE_UNIT.

Security Features

  • Variable-length PIN support (4-10 digits)
  • Constant-time PIN comparison to prevent timing attacks
  • Automatic input sanitization
  • Secure PIN validation middleware
  • No PIN storage in browser (memory only)

Notification Support

  • Integration with Apprise for flexible notifications
  • Support for all Apprise notification services
  • Customizable notification messages with filename templating
  • Optional - disabled if no APPRISE_URL is set

Future Features

  • Camera Upload for Mobile
  • Enhanced Progress Features (upload speed display, time remaining estimation)

Quick Start

Running Locally

  1. Install dependencies:
npm install
  1. Set environment variables in .env:
PORT=3000                  # Port to run the server on
MAX_FILE_SIZE=1024        # Maximum file size in MB (default: 1024 MB / 1 GB)
DUMBDROP_PIN=123456       # Optional PIN protection (4-10 digits, leave empty to disable)
  1. Start the server:
npm start

Running with Docker

Pull from Docker Hub

# Pull the image
docker pull dumbwareio/dumbdrop:latest

# Run the container
# For Linux/Mac:
docker run -p 3000:3000 -v $(pwd)/local_uploads:/app/uploads -e DUMBDROP_PIN=123456 dumbwareio/dumbdrop:latest

# For Windows PowerShell:
docker run -p 3000:3000 -v "${PWD}\local_uploads:/app/uploads" -e DUMBDROP_PIN=123456 dumbwareio/dumbdrop:latest

Docker Compose

name: Dumb Drop
services:
    dumbdrop:
        ports:
            - 3000:3000
        volumes:
            - $(pwd)/local_uploads:/app/uploads
        environment:
            - DUMBDROP_PIN=123456
            # - APPRISE_URL=          # i.e. tgram://bottoken/ChatID
            # - APPRISE_MESSAGE= 
        image: dumbwareio/dumbdrop:latest

Build Locally

  1. Build the Docker image:
docker build -t dumbdrop .
  1. Run the container:
# For Linux/Mac:
docker run -p 3000:3000 -v $(pwd)/local_uploads:/app/uploads -e DUMBDROP_PIN=123456 dumbdrop

# For Windows PowerShell:
docker run -p 3000:3000 -v "${PWD}\local_uploads:/app/uploads" -e DUMBDROP_PIN=123456 dumbdrop

Usage

  1. Open your browser and navigate to http://localhost:3000 (unless another domain has been setup)
  2. If PIN protection is enabled, enter the 4-10 digit PIN
  3. Drag and drop files into the upload area or click "Browse Files"
  4. Select one or multiple files
  5. Click "Upload Files"
  6. Files will be saved to:
    • Local development: ./uploads directory
    • Docker/Unraid: The directory you mapped to /app/uploads in the container

Technical Details

  • Backend: Node.js with Express
  • Frontend: Vanilla JavaScript with modern drag-and-drop API
  • File handling: Chunked file uploads with configurable size limits
  • Security: Optional PIN protection for uploads
  • Containerization: Docker with automated builds via GitHub Actions
Description
dumb file dropper
Readme GPL-3.0 1.8 MiB
Languages
JavaScript 58%
HTML 36.6%
CSS 4.5%
Dockerfile 0.9%