Представьте: интернет-магазин с 5000 товаров, каждый с несколькими изображениями. При загрузке через сервер среднее время обработки одного файла — 2 секунды, при 50 одновременных загрузках — 100 секунд. LCP страницы с продуктами растёт до 12 секунд, INP — до 300 мс. Uploadcare решает эту проблему кардинально: файлы уходят напрямую в CDN, минуя ваш сервер. Мы используем его в 30+ проектах, включая высоконагруженные медиа-сайты, и знаем, как настроить интеграцию правильно. После внедрения нагрузка на сервер снижается в 3–5 раз, LCP падает до 2 секунд, INP — до 50 мс, а скорость загрузки страниц увеличивается в среднем на 40%. Средняя экономия на серверных ресурсах составляет 70% от бюджета на хостинг. На одном из проектов ежемесячные траты на хостинг снизились с $1.5k–450.
Как работает Uploadcare?
CDN-сервис принимает файлы с браузера, ваш бэкенд получает только UUID. Через URL можно получить оригинал, превью, изменённые версии. Никакой нагрузки на хостинг — всё обрабатывается на стороне CDN с автоматической оптимизацией и кешированием. Загрузка файла через Uploadcare вместо сервера может сократить время загрузки с 2 секунд до 0.4 секунды — это более чем в 5 раз быстрее. Сервис обрабатывает миллионы запросов в минуту, обеспечивая высокую надёжность. Uploadcare автоматически проверяет файлы на вредоносное ПО, что снижает риски безопасности.
Почему Uploadcare лучше самописного решения?
| Критерий | Самописное решение | Uploadcare |
|---|---|---|
| Нагрузка на сервер | 100% (приём, обработка, конвертация) | 0% (только UUID) |
| Скорость загрузки | Зависит от сервера | CDN с мультирегиональным кешем |
| Обработка изображений | Нужен свой код и библиотеки | URL-параметры без кода |
| Безопасность | Нужна защита от загрузки вредоносных файлов | Встроенная проверка и DDoS-защита |
Uploadcare снижает время загрузки в 3–5 раз по сравнению с классическим подходом. Мы выбрали его для себя и клиентов — 30+ успешных проектов подтверждают надёжность.
Как интегрировать Uploadcare в React?
Установите пакет и настройте компонент загрузчика. Пошаговая инструкция:
- Установите пакет
@uploadcare/react-uploaderи стили. - Импортируйте
FileUploaderRegularи подключите CSS. - Укажите публичный ключ через переменные окружения.
- Используйте компонент с колбэками
onFileUploadSuccessиonFileUploadFailed. - После успешной загрузки получите объект с UUID и отправьте его на бэкенд.
import { FileUploaderRegular } from '@uploadcare/react-uploader'
import '@uploadcare/react-uploader/core.css'
interface UploadedFile {
uuid: string
cdnUrl: string
name: string
size: number
mimeType: string
}
interface UploaderProps {
onUpload: (file: UploadedFile) => void
accept?: string
maxFileSize?: number
multiple?: boolean
}
function FileUploader({ onUpload, accept, maxFileSize, multiple = false }: UploaderProps) {
return (
<FileUploaderRegular
pubkey={import.meta.env.VITE_UPLOADCARE_PUBLIC_KEY}
multiple={multiple}
accept={accept}
maxLocalFileSizeBytes={maxFileSize}
onFileUploadSuccess={(file) => {
onUpload({
uuid: file.uuid,
cdnUrl: file.cdnUrl,
name: file.name ?? '',
size: file.size ?? 0,
mimeType: file.mimeType ?? '',
})
}}
onFileUploadFailed={(file) => {
console.error('Upload failed:', file.errors)
}}
imgOnly={accept === 'image/*'}
/>
)
}Если требуется кастомный UI, мы реализуем нестандартный загрузчик с нуля. Для отслеживания прогресса используем хук useUploadcare — он возвращает процент загрузки и состояние. Пример:
import { useUploadcare } from '@uploadcare/react-uploader'
function UploadProgress() {
const { progress } = useUploadcare({
pubkey: import.meta.env.VITE_UPLOADCARE_PUBLIC_KEY
})
return <div>Прогресс: {progress}%</div>
} Какие трансформации изображений доступны?
Ключевая фишка — обработка изображений без кода на бэкенде. Собирайте цепочки операций через URL.
| Трансформация | Назначение | Пример URL-параметра |
|---|---|---|
| resize | Изменение размера | /resize/800x/ |
| scale_crop | Обрезка с масштабированием | /scale_crop/300x300/center |
| format | Конвертация в WebP, PNG, JPEG | /format/webp |
| quality | Качество (smart/число) | /quality/smart |
| blur | Размытие | /blur/20 |
| grayscale | Чёрно-белое | /grayscale |
Пример URL: https://ucarecdn.com/{uuid}/-/scale_crop/300x300/center/-/format/webp/-/quality/smart/.
Пример полного URL трансформации
https://ucarecdn.com/{uuid}/-/scale_crop/300x300/center/-/format/webp/-/quality/smart/
Как защитить загрузку на бэкенде?
Клиентская загрузка означает, что на бэкенд приходит только UUID. Нужно верифицировать, что файл реально существует и принадлежит вашему проекту, проверить mime-тип и размер. Пример на Laravel:
public function store(Request $request): JsonResponse {
$request->validate([
'file_uuid' => ['required', 'string', 'regex:/^[a-f0-9-]{36}$/'],
]);
$uuid = $request->input('file_uuid');
// Проверка через Uploadcare REST API
$response = Http::withHeaders([
'Authorization' => 'Uploadcare.Simple ' . config('services.uploadcare.public_key') . ':' . config('services.uploadcare.secret_key'),
])->get("https://api.uploadcare.com/files/{$uuid}/");
if (!$response->successful()) {
return response()->json(['error' => 'Файл не найден'], 422);
}
$fileInfo = $response->json();
// Проверка mime-типа
if (!str_starts_with($fileInfo['mime_type'], 'image/')) {
return response()->json(['error' => 'Допустимы только изображения'], 422);
}
// Сохраняем UUID в базу
$media = Media::create([
'uuid' => $uuid,
'cdn_url' => $fileInfo['original_file_url'],
'filename' => $fileInfo['original_filename'],
'size' => $fileInfo['size'],
'mime_type' => $fileInfo['mime_type'],
]);
return response()->json($media);
}Для Node.js аналогичная проверка выполняется через axios с заголовком авторизации. Мы также подключаем проверку через Uploadcare REST API (метод /files/{uuid}/). Это защищает от подделки UUID и нежелательных форматов.
Сроки внедрения
Базовая интеграция с виджетом и бэкенд-валидацией занимает от 0.5 до 1 дня. Если требуется кастомный UI, дополнительные обработчики или миграция существующих файлов, сроки уточняются индивидуально. Срок окупаемости интеграции — 2-3 месяца за счёт снижения затрат на серверы.
Что входит в работу по интеграции?
- Установка и настройка виджета Uploadcare (React, Vue или Angular).
- Настройка CDN-трансформаций под требования проекта.
- Разработка бэкенд-валидации UUID (Laravel, Node.js, Django).
- Интеграция с существующим хранилищем (S3, локальные диски).
- Документация по использованию и поддержке.
- Обучение команды (1 час онлайн).
- Гарантия на интеграцию — 3 месяца.
Закажите интеграцию Uploadcare под ключ — мы проведём аудит, настроим виджет и бэкенд. Получите консультацию по настройке Uploadcare для вашего проекта. Свяжитесь с нами для обсуждения ваших задач.







