# 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/ru/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/ru/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/ru/kb/cloudflare-cache-rules/)
5. сравнить с [Cloudflare R2](https://www.zevshost.net/ru/kb/cloudflare-r2-storage/), если файлы нужно хранить без обработки

---

Источник: https://www.zevshost.net/ru/kb/cloudflare-images-stream/
