A lightweight, self-hosted file upload service with a beautiful web interface.
- 📤 Parallel uploads - Upload multiple files simultaneously
- 🎯 Drag & drop - Intuitive file selection
- 📊 Progress tracking - Real-time upload progress bars
- 🔒 Password protection - Optional authentication
- 📁 File management - Download and delete uploaded files
- 🐳 Docker ready - Easy deployment with Docker
- 🎨 Beautiful UI - Modern, responsive interface
- Clone the repository:
git clone https://github.com/sammwyy/sus.git
cd sus- Edit
docker-compose.ymlto set your password (optional):
environment:
- PASSWORD=your_password_here- Start the service:
docker-compose up -d- Access the service at
http://localhost:3000
Build the image:
docker build -t sammwy/sus .Run the container:
docker run -d \
-p 3000:3000 \
-v $(pwd)/data:/data \
-e PASSWORD=your_password_here \
sammwy/sus- Install dependencies:
npm install- Set environment variables:
export PORT=3000
export UPLOAD_DIR=./uploads
export PASSWORD=your_password_here- Start the server:
npm startConfigure the service using environment variables:
| Variable | Description | Default |
|---|---|---|
PORT |
Server port | 3000 |
UPLOAD_DIR |
Directory to store uploaded files | /data |
PASSWORD |
Password for authentication (empty = no auth) | `` |
Map a local directory to persist uploaded files:
docker run -v /path/to/local/dir:/data sammwy/susPOST /api/upload
Headers: Authorization: <password>
Body: multipart/form-data with file field
GET /api/files
Headers: Authorization: <password>
GET /api/files/:filename
Headers: Authorization: <password>
DELETE /api/files/:filename
Headers: Authorization: <password>
- Set a strong password for production use
- Files are stored with unique names to prevent conflicts
- Maximum file size limit: 1GB (configurable in server.js)
- Authentication required for all operations when password is set
MIT License - see LICENSE file for details
Contributions are welcome! Please open an issue or submit a pull request.