Документация
Dev

Самостоятельная загрузка файлов

Как загрузить исходный файл в Problembo File Store и использовать его в API задачах через `fileId` или прямой `url`.

Самостоятельная загрузка файлов

Если задача ожидает файл, API payload не принимает содержимое файла в виде Base64. Для файловых полей используйте один из двух вариантов:

  • url — публичный http/https URL, который Problembo сможет скачать сам
  • fileId — идентификатор файла, который вы заранее загрузили в Problembo File Store

Вариант 1: передать url

Это самый простой вариант, если файл уже доступен по прямой ссылке http/https.

{
  "srcImage": {
    "url": "https://example.com/input/photo.png",
    "origFilename": "photo.png"
  }
}

Когда вы отправляете задачу, Problembo скачивает файл, загружает его во внутреннее хранилище, заменяет url на fileId, а затем запускает обработку.

Вариант 2: загрузить файл самостоятельно и использовать fileId

Используйте этот путь для server-to-server интеграций, когда файл локальный, приватный или вы не хотите, чтобы Problembo скачивал его со стороннего URL.

Этот upload-flow работает через API token и использует эндпоинты /apis/v1/client/files/*.

Шаг 1: запросить presigned URL для загрузки

curl 'https://problembo.com/apis/v1/client/files/upload-url-for-src' \
  -X POST \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer YOUR_API_TOKEN' \
  -d '{
    "origFileName": "photo.png",
    "fileSizeBytes": "2458123"
  }'

Типичный ответ для обычной single-part загрузки:

{
  "fileId": "910e1b85-4677-49d4-abd3-41218733ab60.png",
  "uploadUrl": "https://...",
  "contentDisposition": "inline; filename=photo.png",
  "origFileName": "photo.png"
}

Шаг 2: загрузить бинарный файл в uploadUrl

curl -X PUT 'UPLOAD_URL_FROM_STEP_1' \
  --upload-file ./photo.png

Шаг 3: подтвердить загрузку

curl 'https://problembo.com/apis/v1/client/files/upload-complete' \
  -X POST \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer YOUR_API_TOKEN' \
  -d '{
    "fileId": "910e1b85-4677-49d4-abd3-41218733ab60.png"
  }'

Ответ:

{
  "remoteFile": {
    "fileId": "910e1b85-4677-49d4-abd3-41218733ab60.png"
  }
}

Шаг 4: использовать fileId в /apis/v1/client/tasks

{
  "srcImage": {
    "fileId": "910e1b85-4677-49d4-abd3-41218733ab60.png",
    "origFilename": "photo.png"
  }
}

Особенности client upload-flow:

  • forceRoute во внешнем client API не поддерживается
  • отдельного download endpoint для source-файлов нет
  • любой API token того же аккаунта может повторно использовать этот fileId
  • при создании /apis/v1/client/tasks Problembo проверяет, что fileId принадлежит владельцу токена и находится в статусе ACTIVE

Multipart-загрузка для больших файлов

Если на шаге 1 сервер вернул multipartPlan, нужно использовать multipart-flow вместо одного PUT запроса.

В этом случае:

  1. Загрузите каждый кусок файла в свой multipartPlan.parts[].uploadUrl
  2. Соберите значения etag, которые вернёт S3-совместимое хранилище
  3. При необходимости запросите новые presigned part URLs через /apis/v1/client/files/multipart-plan
  4. Завершите загрузку через /apis/v1/client/files/upload-multipart-complete

Пример запроса на обновление multipart plan для части, у которой истекла ссылка:

curl 'https://problembo.com/apis/v1/client/files/multipart-plan' \
  -X POST \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer YOUR_API_TOKEN' \
  -d '{
    "fileId": "910e1b85-4677-49d4-abd3-41218733ab60.mp4",
    "partNumbers": [2]
  }'

Пример ответа:

{
  "uploadId": "upload-123",
  "partSizeBytes": "5242880",
  "parts": [
    {
      "partNumber": 2,
      "uploadUrl": "https://..."
    }
  ]
}

Пример запроса на завершение:

curl 'https://problembo.com/apis/v1/client/files/upload-multipart-complete' \
  -X POST \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer YOUR_API_TOKEN' \
  -d '{
    "fileId": "910e1b85-4677-49d4-abd3-41218733ab60.mp4",
    "parts": [
      { "partNumber": 1, "etag": "etag-part-1" },
      { "partNumber": 2, "etag": "etag-part-2" }
    ]
  }'
{
  "remoteFile": {
    "fileId": "910e1b85-4677-49d4-abd3-41218733ab60.mp4"
  }
}

Что выбрать?

  • Используйте /apis/v1/client/files/*, если у вас server-to-server интеграция с API token
  • Используйте url, если файл уже доступен по прямой ссылке http/https
  • Используйте fileId, если файл локальный, приватный, большой или генерируется внутри вашей системы
  • Не передавайте Base64-содержимое файла внутри task payload

Последнее обновление: 8 марта 2026

На этой странице