Skip to main content

Blog

Сохранение файлов ИИ: от URL результата PiAPI к постоянному хранилищу

Иллюстрация инструментов разработчика PiAPI

Завершённая генерация даёт результат, но URL на стороне поставщика не является постоянной медиатекой. Если пользователи будут открывать, редактировать или скачивать его позже, скопируйте файл в подконтрольное хранилище и отслеживайте копию отдельно от генерации.

1. Прочитайте результат используемой модели

Получите задачу по сохранённому ID и требуйте data.status равного completed до извлечения файлов. Структура data.output зависит от модели и типа задачи. Используйте соответствующий пример; не предполагайте, что каждый ответ содержит одинаковый URL изображения или видео на верхнем уровне.

Например, документированный ответ Kling содержит массив works с видеоресурсами. Другие модели используют другие поля. Сохраните ID, модель, тип задачи, время завершения и индекс выбранного ресурса вместе со своим заданием, чтобы повторная попытка нашла тот же результат.

2. Копируйте сразу и проверяйте сроки по сервису

Документация хранения PiAPI описывает разные правила для сервисов и мест размещения. Некоторые записи задают короткие сроки, другие отсылают к правилам CDN поставщика. Страница содержит и старые сервисы. Не переносите один срок на все современные модели и не считайте отсутствие срока бессрочным хранением.

После завершения запустите фоновое копирование через вебхук или опрос. Надёжно сохраните задание до подтверждения callback. Ниже показаны состояния хранения вашего приложения, а не состояния API задач PiAPI.

generation completed → copy queued → downloading → verified → saved
                                      ↘ copy failed → retry copy

3. Проверьте байты до отметки о сохранении

Скачивайте по URL результата, не передавая туда ключ API PiAPI. Ограничьте допустимые адреса, проверяйте перенаправления и задавайте пределы размера и времени. Проверяйте HTTP-статус, фактический объём, ожидаемый тип медиа и базовую читаемость. HTML-страница ошибки с кодом 200 — не сохранённое видео.

Запишите временный объект, вычислите контрольную сумму и опубликуйте окончательный объект только после проверки. Используйте устойчивый ключ из ID задачи и индекса ресурса. Запишите ключ, объём, контрольную сумму и время; предоставляйте собственный контролируемый URL по своей политике доступа.

4. Повторяйте хранение отдельно от генерации

При ошибке копирования оставьте генерацию завершённой и повторяйте копирование, пока источник доступен. Постоянная уникальная запись предотвращает дубли медиа. Если URL больше не читается, повторно запросите задачу и проверьте текущий результат; это не гарантирует восстановления просроченного файла. До запуска проверьте повторные события, неполные загрузки и недоступные URL.

Источники: хранение результатов, получение задачи Kling, вебхуки. Это схема хранения приложения, а не обещание архивного хранения со стороны PiAPI.