Skip to content

d1maash/fileshare

Repository files navigation

FileShare - Сервис безопасного обмена файлами

FileShare - это веб-приложение на Next.js для безопасного обмена файлами с контролем доступа и сроком действия ссылок.

Основные возможности

  • 🔐 Безопасная загрузка файлов

    • Поддержка различных типов файлов
    • Автоматическое определение типа контента
    • Сохранение оригинального имени файла
  • 👥 Контроль доступа

    • Авторизация через Clerk
    • Возможность указать список разрешенных пользователей
    • Ограничение количества скачиваний
    • Срок действия ссылок (24 часа)
  • 📊 Личный кабинет

    • Просмотр всех загруженных файлов
    • Отслеживание статуса каждого файла
    • Информация о сроках действия и количестве скачиваний

Технический стек

  • Frontend:

    • Next.js 14
    • React
    • Tailwind CSS
    • Heroicons
  • Аутентификация:

    • Clerk
  • Хранение файлов:

    • Локальная файловая система
    • Метаданные в JSON-формате

Установка и запуск

  1. Клонирование репозитория:

    git clone <repository-url>
    cd fileshare
  2. Установка зависимостей:

    npm install
  3. Настройка переменных окружения: Создайте файл .env.local и добавьте следующие переменные:

    NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY=your_publishable_key
    CLERK_SECRET_KEY=your_secret_key
    NEXT_PUBLIC_CLERK_SIGN_IN_URL=/sign-in
    NEXT_PUBLIC_CLERK_SIGN_UP_URL=/sign-up
    NEXT_PUBLIC_CLERK_AFTER_SIGN_IN_URL=/dashboard
    NEXT_PUBLIC_CLERK_AFTER_SIGN_UP_URL=/dashboard
  4. Запуск приложения:

    npm run dev

Структура проекта

src/
├── app/                    # Маршруты и страницы приложения
│   ├── api/               # API endpoints
│   │   ├── download/      # Скачивание файлов
│   │   ├── upload/        # Загрузка файлов
│   │   └── user-files/    # Получение списка файлов пользователя
│   ├── dashboard/         # Личный кабинет
│   ├── download/          # Страница скачивания
│   ├── sign-in/          # Страница входа
│   └── sign-up/          # Страница регистрации
├── components/            # React компоненты
│   ├── FileUploader.tsx  # Компонент загрузки файлов
│   ├── Navbar.tsx        # Навигационная панель
│   └── DownloadLink.tsx  # Компонент ссылки на скачивание
└── middleware.ts         # Middleware для аутентификации

API Endpoints

POST /api/upload

Загрузка файла на сервер.

Параметры запроса:

  • file: Файл для загрузки
  • userId: ID пользователя (автоматически через Clerk)
  • allowedUsers: Список email адресов пользователей, которым разрешен доступ (опционально)

Ответ:

{
    "fileId": "уникальный_идентификатор",
    "downloadUrl": "/api/download/уникальный_идентификатор"
}

GET /api/download/[fileId]

Скачивание файла.

Параметры пути:

  • fileId: Уникальный идентификатор файла

Ответ:

  • Файл с правильным Content-Type
  • Статус 404, если файл не найден
  • Статус 410, если срок действия истек
  • Статус 403, если превышен лимит скачиваний или нет доступа

GET /api/user-files

Получение списка файлов пользователя.

Ответ:

{
    "files": [
        {
            "fileId": "идентификатор",
            "originalName": "имя_файла",
            "expiresAt": "дата_истечения",
            "downloadCount": 0,
            "maxDownloads": 1,
            "allowedUsers": ["email@example.com"]
        }
    ]
}

Безопасность

  • Аутентификация через Clerk
  • Проверка прав доступа для каждого файла
  • Ограничение времени жизни ссылок
  • Ограничение количества скачиваний
  • Безопасное хранение метаданных

Лицензия

MIT License

About

Fileshare project with link and with high security

Resources

Stars

Watchers

Forks

Packages

No packages published