# Cloudflare Images і Stream: зберігання та роздача медіа

> Cloudflare Images і Stream: як зберігати фото та відео поза origin-сервером, змінювати розмір картинок на льоту й роздавати ролики через HLS.

## Навіщо потрібні 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](https://www.zevshost.net/uk/kb/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](https://www.zevshost.net/uk/kb/cloudflare-workers/), поставлений перед роздачею зображень.

## Як завантажити і роздати відео через 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-сервера найважчу частину роботи — роздачу медіафайлів, — і роблять це без правки коду сайту під кожен розмір картинки.

1. створити API-токен з правами Images:Edit і Stream:Edit
2. визначити набір варіантів зміни розміру під макети сайту
3. налаштувати водяний знак або підписані URL для приватного відео
4. перевірити кешування готових URL через [Cache Rules](https://www.zevshost.net/uk/kb/cloudflare-cache-rules/)
5. порівняти з [Cloudflare R2](https://www.zevshost.net/uk/kb/cloudflare-r2-storage/), якщо файли треба зберігати без обробки

---

Джерело: https://www.zevshost.net/uk/kb/cloudflare-images-stream/
