Навіщо потрібні Cloudflare Images і Stream
Cloudflare Images і Cloudflare Stream закривають одне завдання для різних типів файлів: не зберігати медіа на своєму сервері, а віддавати його через мережу Cloudflare зі зміною розміру, конвертацією формату та захистом від хотлінків. Images працює з картинками — фото товарів, аватари, скриншоти. Stream працює з відео — від навчальних роликів до записів вебінарів.
Обидва сервіси вирішують проблему, знайому власникам VPS на ZevsHost: диск заповнюється медіафайлами, а навантаження на вихідний трафік зростає з кожним відвідувачем. Images і Stream переносять роздачу на edge-сервери Cloudflare, а на origin залишається лише один оригінал файлу.
Чим Cloudflare Images відрізняється від Cloudflare Stream
Різниця не тільки в типі файлу, а й у способі обробки та роздачі готового результату кінцевому користувачу.
| Параметр | Cloudflare Images | Cloudflare Stream |
|---|---|---|
| Тип файлу | JPEG, PNG, WebP, GIF, AVIF | MP4, MOV, ролики тривалістю до кількох годин |
| Обробка | Зміна розміру, обрізка, зміна формату на льоту | Транскодинг у HLS і DASH, кілька бітрейтів |
| Роздача | Через image delivery URL з варіантами | Через вбудований плеєр або прямі маніфести |
Як завантажити зображення через API
Токен створюється в Dashboard у розділі My Profile → API Tokens з правами Images:Edit. Далі завантаження виконується одним запитом:
curl -X POST \
-F file=@photo.jpg \
-H "Authorization: Bearer $CF_API_TOKEN" \
https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/images/v1
Відповідь містить ідентифікатор зображення та базовий URL для роздачі. Для масового завантаження каталогу товарів краще не ганяти curl вручну, а завести автоматизацію, як описано в статті про керування Cloudflare через API та Terraform.
Варіанти зображень: зміна розміру без перезавантаження оригіналу
Один завантажений оригінал роздається в різних розмірах через параметри в URL, без створення копій файлу на диску:
- width і height — цільові розміри в пікселях
- fit — scale-down, contain, cover, crop або pad
- quality — число від 1 до 100, впливає на розмір файлу
- format — auto підбирає WebP або AVIF за заголовком Accept браузера
- sharpen — різкість після зміни розміру, число від 0 до 10
https://imagedelivery.net/<account_hash>/<image_id>/w=800,quality=80,format=auto
Коли потрібно додати водяний знак або підписати URL тимчасовим токеном перед видачею посилання, це робить Cloudflare Worker, поставлений перед роздачею зображень.
Як завантажити і роздати відео через Stream
Для відео діє та сама логіка: один запит на завантаження, далі Cloudflare сам готує адаптивні потоки.
curl -X POST \
-H "Authorization: Bearer $CF_API_TOKEN" \
-F file=@lesson.mp4 \
https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/stream
Після завантаження Stream нарізає відео на сегменти HLS і DASH і видає ідентифікатор для вбудовування плеєра. Ролик доступний одразу в кількох бітрейтах, а браузер глядача сам обирає варіант під швидкість з'єднання.
Ліміти і на що звернути увагу
Перед переносом медіатеки варто звірити ліміти сервісів, щоб не впертися в них після завантаження сотень файлів:
- максимальний розмір одного зображення — 10 МБ
- максимальна тривалість одного відео на Stream — 6 годин
- зберігання тарифікується окремо від вихідного трафіку на перегляди
- приватні відео закриваються підписаними URL з обмеженням за часом дії
Підсумок: що зробити перед підключенням
Images і Stream знімають з origin-сервера найважчу частину роботи — роздачу медіафайлів, — і роблять це без правки коду сайту під кожен розмір картинки.
- створити API-токен з правами Images:Edit і Stream:Edit
- визначити набір варіантів зміни розміру під макети сайту
- налаштувати водяний знак або підписані URL для приватного відео
- перевірити кешування готових URL через Cache Rules
- порівняти з Cloudflare R2, якщо файли треба зберігати без обробки