Уявіть: інтернет-магазин із 5000 товарів, кожен із кількома зображеннями. При завантаженні через сервер середній час обробки одного файлу — 2 секунди, при 50 одночасних завантаженнях — 100 секунд. LCP сторінки з продуктами зростає до 12 секунд, INP — до 300 мс. Uploadcare вирішує цю проблему кардинально: файли йдуть напряму в CDN, минаючи ваш сервер. Наша команда має 6+ років досвіду інтеграції CDN-сервісів. Ми використовуємо його в 30+ проєктах, включаючи високонавантажені медіа-сайти, і знаємо, як налаштувати інтеграцію правильно. Після впровадження навантаження на сервер знижується в 3–5 разів, LCP падає до 2 секунд, INP — до 50 мс, а швидкість завантаження сторінок збільшується в середньому на 40%. Середня економія на серверних ресурсах становить 70% від бюджету на хостинг. На одному з проєктів вдалося значно знизити витрати на хостинг. Uploadcare в 5 разів швидше за саморобне рішення при завантаженні файлів.
Як працює Uploadcare?
Wikipedia: 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 для вашого проєкту. Зв'яжіться з нами для обговорення ваших завдань.







