A simple, lightweight file drop web server for easy file uploading, downloading, and folder management.
- Upload files (drag-and-drop or file picker)
- Download files
- Create folders
- Delete files and folders
- Navigate through folder structure
- No authentication (public access)
- Docker support
- User authentication
- User-scoped file storage
- Public view (read-only, unauthenticated)
- User view (full access, authenticated)
- Backend: Node.js + Express
- Frontend: Vanilla HTML/CSS/JavaScript
- Storage: Local filesystem
- Containerization: Docker
- Node.js 18+ (for local development)
- Docker and Docker Compose (for containerized deployment)
- Install dependencies:
npm install- Start the server:
npm start- Access the application:
http://localhost:3000
For development with auto-reload:
npm run dev- Build and start the container:
docker-compose up -d- Access the application:
http://localhost:3000
- Stop the container:
docker-compose down# Build the image
docker-compose build
# View logs
docker-compose logs -f
# Restart the service
docker-compose restart
# Remove everything including volumes
docker-compose down -vEnvironment variables (can be set in .env or docker-compose.yml):
PORT: Server port (default: 3000)UPLOAD_DIR: Directory for uploaded files (default: ./uploads)MAX_FILE_SIZE: Maximum file size in MB (default: 1024 = 1GB)
Files are stored in the uploads/ directory by default. This directory is:
- Automatically created on server startup
- Ignored by git (see
.gitignore) - Mounted as a Docker volume for persistence
GET /api/files?path={folder_path}
POST /api/upload
Content-Type: multipart/form-data
Body: files[], folder
GET /api/download/{file_path}
POST /api/folder
Content-Type: application/json
Body: { "path": "{parent_path}", "name": "{folder_name}" }
DELETE /api/delete/{item_path}
GET /api/health
- Anyone with network access can upload, download, or delete files
- No file type restrictions
- 1GB file size limit (configurable via MAX_FILE_SIZE environment variable)
- Path traversal protection implemented
- Suitable for trusted networks only (e.g., home network, internal network)
- Use behind a firewall or VPN for production
- Consider implementing rate limiting for public deployments
- Monitor disk space usage
- Regular backups recommended
filedrop/
├── server.js # Express server and API endpoints
├── package.json # Node.js dependencies
├── Dockerfile # Docker image definition
├── docker-compose.yml # Docker Compose configuration
├── .dockerignore # Docker build exclusions
├── .gitignore # Git exclusions
├── README.md # Documentation
├── public/ # Frontend files
│ ├── index.html # Main HTML
│ ├── styles.css # Styles
│ └── app.js # Frontend JavaScript
└── uploads/ # File storage (created automatically)
- User authentication system
- User-specific storage quotas
- File sharing links with expiration
- File preview for images and documents
- Search functionality
- File versioning
- Trash/recycle bin
- Admin dashboard
- Activity logs
- Mobile app
This is a personal project, but suggestions and feedback are welcome!
MIT