Зачем нужны 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, если файлы нужно хранить без обработки