FileShare - это веб-приложение на Next.js для безопасного обмена файлами с контролем доступа и сроком действия ссылок.
-
🔐 Безопасная загрузка файлов
- Поддержка различных типов файлов
- Автоматическое определение типа контента
- Сохранение оригинального имени файла
-
👥 Контроль доступа
- Авторизация через Clerk
- Возможность указать список разрешенных пользователей
- Ограничение количества скачиваний
- Срок действия ссылок (24 часа)
-
📊 Личный кабинет
- Просмотр всех загруженных файлов
- Отслеживание статуса каждого файла
- Информация о сроках действия и количестве скачиваний
-
Frontend:
- Next.js 14
- React
- Tailwind CSS
- Heroicons
-
Аутентификация:
- Clerk
-
Хранение файлов:
- Локальная файловая система
- Метаданные в JSON-формате
-
Клонирование репозитория:
git clone <repository-url> cd fileshare
-
Установка зависимостей:
npm install
-
Настройка переменных окружения: Создайте файл
.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
-
Запуск приложения:
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 для аутентификации
Загрузка файла на сервер.
Параметры запроса:
file: Файл для загрузкиuserId: ID пользователя (автоматически через Clerk)allowedUsers: Список email адресов пользователей, которым разрешен доступ (опционально)
Ответ:
{
"fileId": "уникальный_идентификатор",
"downloadUrl": "/api/download/уникальный_идентификатор"
}Скачивание файла.
Параметры пути:
fileId: Уникальный идентификатор файла
Ответ:
- Файл с правильным Content-Type
- Статус 404, если файл не найден
- Статус 410, если срок действия истек
- Статус 403, если превышен лимит скачиваний или нет доступа
Получение списка файлов пользователя.
Ответ:
{
"files": [
{
"fileId": "идентификатор",
"originalName": "имя_файла",
"expiresAt": "дата_истечения",
"downloadCount": 0,
"maxDownloads": 1,
"allowedUsers": ["email@example.com"]
}
]
}- Аутентификация через Clerk
- Проверка прав доступа для каждого файла
- Ограничение времени жизни ссылок
- Ограничение количества скачиваний
- Безопасное хранение метаданных
MIT License