Skip to content

Repository files navigation

File Manager

Overview

A File manager with React Frontend and Rails 7 Backend. Allows users to manage their files and folders seamlessly. The app uses Minio for object storage, ensuring that the structure in the File Manager UI mirrors the structure in Minio, providing a reliable and intuitive user experience. Additionally, the app features real-time updates with ActionCable, allowing users to see changes immediately as they happen.

Features

  • Authentication — email/password sign up & sign in with JWT access/refresh tokens.
  • Folder Management — create, create nested, rename, move (drag-and-drop or menu), trash, permanently delete, hierarchical listing.
  • File Management — upload (dialog & drag-and-drop, multiple files), rename, move, view/preview, trash, permanently delete.
  • Media Support — images (jpg/jpeg/png/gif/webp), common video formats (mp4, mov, webm, mkv, ...) and PDF.
  • Thumbnails — image (MiniMagick) and video (ffmpeg) thumbnails generated as small/medium JPEGs for list & grid views.
  • Upload Progress — live progress bar driven by the upload stream.
  • Layouts — list and grid views.
  • Sorting & Filtering — sort by name, size or created date (asc/desc); filter all / folders / files.
  • File & Folder Size — per-file size plus recursive folder totals.
  • Storage Usage — total storage occupied by the user.
  • Real-time Updates — ActionCable broadcasts for create / rename / move / remove events.
  • Sharing — share a file or folder with a specific existing user (by email) or with anyone via a secure, long-token link; email-scoped or public access; browse & download shared folders.
  • Trash — soft delete (trash) with permanent delete.
  • API Docs — Swagger/OpenAPI documentation via rswag.

Technology Stack

  • Rails 7: Web application framework
  • Postgresql: Database
  • Minio: Object storage for files
  • Actionable: For asynchronous jobs
  • Redis: For synchronous updates
  • Rswag: Swagger documentation for API endpoints
  • Docker: Containerization of dependencies

Preview

Screenshots

Screenshot 2026-09-25 at 1 37 19 AM Screenshot 2026-09-25 at 1 37 30 AM Screenshot 2026-09-25 at 1 38 07 AM Screenshot 2026-09-25 at 1 38 55 AM Screenshot 2026-09-25 at 1 39 13 AM Screenshot 2026-09-25 at 1 39 25 AM Screenshot 2026-09-25 at 1 39 35 AM Screenshot 2026-09-25 at 1 39 52 AM Screenshot 2026-09-25 at 2 26 10 AM

API Documentation

Setup

Prerequisites

Dependencies installed on your machine

  • Docker and Docker Compose
  • Ruby and Rails

Installation Steps

  1. Clone the repository:

    git clone https://github.com/voidzenn/file_manager.git
    cd <repository-name>
  2. Rename .env.example to .env:

    mv .env.example .env
  3. Install gem dependencies:

    bundle install
  4. Build and run the Docker containers:

    docker-compose up --build
  5. Access the web application:

    Open your browser and navigate to http://localhost:3000 or http://localhost:3000/api-docs.

Frontend Access

To access the frontend, use the following credentials:

  • Email: test@user.com
  • Password: Password12!

Issue and Solution for MinIO Presigned URLs

Issue: When generating a presigned URL for file viewing in MinIO, the URL was using http://minio:9000, which resulted in a 403 Forbidden error.

Solution: To resolve this issue, a custom Docker network was configured, and MinIO was assigned a specific network address. This approach ensured that MinIO operates with the correct domain and address, allowing presigned URLs to be generated and accessed without authorization issues.

About

Google Drive Clone | Rails | ActionCable | Minio | RSwag

Topics

Resources

Stars

1 star

Watchers

1 watching

Forks

Used by

Contributors

Languages