Опции и перечисления
Значения, которые SDK принимает в параметрах и возвращает в полях сущностей. Перечисления повторяют серверные — те же случаи и те же значения.
ImageOptions
Что сделать с картинкой при загрузке: перекодировать, задать качество, вписать в рамку. Обработка выполняется один раз на сервере, в бакет попадает только результат, оригинал не хранится. Поворот по EXIF применяется, остальные метаданные удаляются.
Неизменяемый объект: каждый метод возвращает новый.
Создание
public function __construct(
ImageFormat $format = ImageFormat::ORIGINAL,
?int $quality = null,
?int $maxWidth = null,
?int $maxHeight = null,
)
public static function original(): ImageOptions
public static function webp(?int $quality = null): ImageOptions
public static function jpeg(?int $quality = null): ImageOptions
public static function png(?int $quality = null): ImageOptions
public static function avif(?int $quality = null): ImageOptions| Параметр | Тип | Пределы | По умолчанию | Описание |
|---|---|---|---|---|
$format |
ImageFormat |
— | ORIGINAL |
во что перекодировать; ORIGINAL — оставить формат |
$quality |
?int |
1–100 | серверное: 82; PNG — 60; AVIF — 55 | качество кодировщика |
$maxWidth |
?int |
16–10000 | без ограничения | вписать по ширине |
$maxHeight |
?int |
16–10000 | без ограничения | вписать по высоте |
Пределы проверяет сервер: значение за ними даёт ValidationException с ошибкой по полю,
например {"quality": ["must not exceed 100"]}.
ImageOptions::fit()
Вписывает картинку в рамку. Только уменьшает, никогда не увеличивает, пропорции сохраняются: 320×200 в рамке 160×160 станет 160×100.
public function fit(?int $maxWidth, ?int $maxHeight = null): ImageOptionsfit(800) ограничивает только ширину; fit(null, 600) — только высоту.
ImageOptions::quality()
Задаёт качество, остальное сохраняет.
public function quality(int $quality): ImageOptionsImageOptions::isEmpty()
true, если опции ничего не просят: формат ORIGINAL, качество и размеры не заданы. Такие
опции сервер не применяет вовсе — processed->reason будет no options.
public function isEmpty(): boolПримеры
use Flytachi\Winter\SDK\S5w\Option\ImageOptions;
ImageOptions::webp(); // WebP, качество 82
ImageOptions::webp(80)->fit(1600, 1600); // WebP 80, вписать в 1600×1600
ImageOptions::avif(50); // AVIF 50
ImageOptions::original()->fit(800); // формат оставить, ширина не больше 800
ImageOptions::jpeg()->quality(90); // JPEG 90Только для картинок
Опции, переданные с файлом, который не является картинкой, сервер отклоняет —
ValidationException (Image options were given, but this file is not an image).
ImageFormat
Во что перекодировать картинку. Строковое перечисление.
| Случай | Значение | MIME | Расширение после загрузки |
|---|---|---|---|
ORIGINAL |
'ORIGINAL' |
— | прежнее |
WEBP |
'WEBP' |
image/webp |
.webp |
JPEG |
'JPEG' |
image/jpeg |
.jpg |
PNG |
'PNG' |
image/png |
.png |
AVIF |
'AVIF' |
image/avif |
.avif |
Методы
mime(): ?string — MIME-тип формата; null для ORIGINAL.
Retention
Сколько хранятся файлы папки, считая от создания каждого файла. Очистка на сервере идёт раз в пять минут, поэтому удаление происходит быстро, но не мгновенно.
| Случай | Значение | Срок |
|---|---|---|
NONE |
0 |
бессрочно |
DAY |
1 |
сутки |
WEEK |
2 |
неделя |
MONTH |
3 |
месяц |
QUARTER |
4 |
три месяца |
HALF_YEAR |
5 |
полгода |
YEAR |
6 |
год |
Методы
interval(): ?DateInterval — срок как интервал; null для NONE.
$file->createdAt->add($folder->retention->interval()); // когда файл удалится(Точное время удаления есть и в самом файле — $file->expiresAt.)
CacheVisibility
Кто может кэшировать файл — директива заголовка Cache-Control.
| Случай | Значение | Директива | Смысл |
|---|---|---|---|
SHARED |
1 |
public |
браузеры и CDN |
PRIVATE |
2 |
private |
только браузер, общие кэши — нет |
NO_STORE |
3 |
no-store |
никто |
Методы
directive(): string — директива для Cache-Control.
TokenAccess
Уровень доступа ключа — поле KeyInfo::$access.
| Случай | Значение | Что открывает |
|---|---|---|
BASIC |
1 |
только check() и раздачу /p/{id} |
FULL |
2 |
всё: папки, файлы, загрузки |
Методы
isFull(): bool — можно ли этим ключом работать с folders(), files() и uploads().
if (!$s5w->check()->access->isFull()) {
throw new RuntimeException('Нужен ключ FULL');
}FileSort
Поле сортировки в files()->list() и files()->all().
| Случай | Значение | Порядок |
|---|---|---|
CREATED |
'created' |
по дате загрузки (по умолчанию) |
NAME |
'name' |
по имени, с учётом регистра (заглавные раньше строчных) |
TYPE |
'type' |
по MIME-типу, затем по имени |
SIZE |
'size' |
по размеру, затем по имени |
SortDirection
| Случай | Значение |
|---|---|
ASC |
'asc' — по возрастанию |
DESC |
'desc' — по убыванию (по умолчанию) |