Пакет · sdk-s5w

Быстрый старт

Один сценарий от начала до конца: скрипт подключается к S5W, заводит папку для отчётов, загружает в неё два файла, находит их в списке, переименовывает один и убирает за собой. На каждом шаге видно, что вернул сервер.

Нужно адрес S5W и ключ FULLВремя ~5 минут

Перед началом

Установите пакет и положите адрес и ключ в переменные окружения — как это сделать и где взять ключ, описано на странице Установка.

bash
composer require flytachi/winter-sdk-s5w
export S5W_URL=https://s5.example.com
export S5W_KEY=s5w_9f3c…

Весь код ниже — это один файл quickstart.php, который растёт с каждым шагом. Полная версия — в конце страницы.

Шаг 1. Подключиться и проверить ключ

quickstart.php
<?php

require __DIR__ . '/vendor/autoload.php';

use Flytachi\Winter\SDK\S5w\S5w;

$s5w = S5w::connect(getenv('S5W_URL'), getenv('S5W_KEY'));

$key = $s5w->check();
printf(
  "Бакет %s, доступ %s, свободно %.1f МБ\n",
  $key->bucket->name,
  $key->access->name,
  $key->storage->free / 1024 / 1024,
);
bash
$ php quickstart.php
Бакет media, доступ FULL, свободно 445.9 МБ

check() — единственный вызов, который годится для любого ключа. Он отвечает на вопрос «ключ рабочий и что за ним стоит». Если ключ не подходит, вместо результата будет исключение — их разбор есть на странице Установка.

Шаг 2. Завести папку

Папки в S5W необязательны, но удобны: у папки есть видимость, срок хранения и политика кэша, и они действуют на все файлы внутри. Заведём папку для отчётов:

quickstart.php
$folder = $s5w->folders()->ensure('reports');

echo "Папка {$folder->name}, публичная: " . ($folder->public ? 'да' : 'нет') . "\n";
bash
Папка reports, публичная: нет

ensure() создаёт папку, если её нет, и возвращает существующую как есть, если она уже создана. Поэтому скрипт можно запускать сколько угодно раз.

Шаг 3. Загрузить файлы

Загрузим два файла: один — сгенерированный прямо в памяти, второй — с диска.

quickstart.php
$files = $s5w->files();

// из памяти: например, отчёт, который приложение только что собрало
$csv = $files->uploadContent("date,total\n2026-11-01,42\n", 'november.csv', folder: $folder);

// с диска
file_put_contents('/tmp/notes.txt', 'Квартальные заметки');
$notes = $files->upload('/tmp/notes.txt', folder: $folder);

foreach ([$csv, $notes] as $file) {
  printf("%s  %-14s %4d байт  %s\n", $file->id, $file->name, $file->content->size, $file->content->mime);
}
bash
fS8sVdbl_oQJprfO  november.csv     25 байт  text/csv
_Yjn2giejB4o0KUV  notes.txt        37 байт  text/plain

Запомните главное поле — id. Это 16-символьный идентификатор файла: по нему файл адресуется во всех остальных методах и в адресах раздачи. Его можно хранить у себя в базе и показывать в URL.

Тип файла определяет сервер

SDK не передаёт MIME-тип — сервер определяет его по содержимому. Имя важно только для текстовых форматов (.csv, .md, .yaml), которые по байтам неотличимы от обычного текста.

Шаг 4. Найти файлы в списке

quickstart.php
$page = $files->list(folder: $folder);

echo "В папке {$page->total} файл(а):\n";
foreach ($page as $file) {
  echo "  {$file->name}\n";
}
bash
В папке 2 файл(а):
notes.txt
november.csv

list() возвращает одну страницу — объект Page. По нему можно пройти foreach, а total показывает, сколько всего файлов под фильтром на всех страницах. Чтобы перебрать все страницы подряд, есть all() — см. Работа с папками и файлами.

Шаг 5. Переименовать

quickstart.php
$notes = $files->rename($notes, 'Q4-notes.txt');

echo "Теперь {$notes->name}, id прежний: {$notes->id}\n";
bash
Теперь Q4-notes.txt, id прежний: _Yjn2giejB4o0KUV

Id при переименовании не меняется, поэтому все уже выданные адреса продолжают работать.

Шаг 6. Убрать за собой

quickstart.php
$files->delete($csv);
$files->delete($notes);
$s5w->folders()->delete('reports');

echo "Готово, бакет чистый\n";
bash
Готово, бакет чистый

Удаление папки удаляет файлы

folders()->delete() удаляет папку вместе со всеми файлами в ней, без подтверждения. Здесь мы удалили файлы заранее только для наглядности — удаления папки хватило бы и одного.

Весь код целиком

quickstart.php
<?php

require __DIR__ . '/vendor/autoload.php';

use Flytachi\Winter\SDK\S5w\S5w;

$s5w = S5w::connect(getenv('S5W_URL'), getenv('S5W_KEY'));

// 1. ключ
$key = $s5w->check();
printf(
  "Бакет %s, доступ %s, свободно %.1f МБ\n",
  $key->bucket->name,
  $key->access->name,
  $key->storage->free / 1024 / 1024,
);

// 2. папка
$folder = $s5w->folders()->ensure('reports');
echo "Папка {$folder->name}, публичная: " . ($folder->public ? 'да' : 'нет') . "\n";

// 3. загрузка
$files = $s5w->files();
$csv = $files->uploadContent("date,total\n2026-11-01,42\n", 'november.csv', folder: $folder);
file_put_contents('/tmp/notes.txt', 'Квартальные заметки');
$notes = $files->upload('/tmp/notes.txt', folder: $folder);
foreach ([$csv, $notes] as $file) {
  printf("%s  %-14s %4d байт  %s\n", $file->id, $file->name, $file->content->size, $file->content->mime);
}

// 4. список
$page = $files->list(folder: $folder);
echo "В папке {$page->total} файл(а):\n";
foreach ($page as $file) {
  echo "  {$file->name}\n";
}

// 5. переименование
$notes = $files->rename($notes, 'Q4-notes.txt');
echo "Теперь {$notes->name}, id прежний: {$notes->id}\n";

// 6. уборка
$files->delete($csv);
$files->delete($notes);
$s5w->folders()->delete('reports');
echo "Готово, бакет чистый\n";

Дальше