Управление файлами

В некоторых блоках SpectrumData источники в качестве входных данных запроса могут принимать двоичные файлы (например, фотографии лица или сканы документов). Для этого при отправке запроса на генерацию отчёта необходимо передать в нём уникальный идентификатор, который присваивается файлу при его загрузке в хранилище сервиса SpectrumData.

Запрос сохранения файла в хранилище следует отправлять с помощью метода POST. Для скачивания файла из хранилища необходимо использовать метод GET.

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

Получив запрос на сохранение файла, API проверяет квоту и помещает объект в хранилище. Идентификатор объекта в хранилище возвращается в ответе API.

Загружаемые в сервис файлы не проверяются на уникальность. Это означает, что при загрузке файла, который уже был отправлен ранее, API вернёт новый идентификатор.

Максимальный размер загружаемого файла — 5 Мбайт.

Загруженный объект хранится в системе и доступен клиенту в течение 30 дней. Скачивать файлы может любой пользователь домена, в котором этот файл был загружен.

Изменение баланса происходит только при загрузке объекта в сервис. Операция получения файла из хранилища бесплатна.

Загрузка файла

Для загрузки файла отправьте POST-запрос к /user/assets/upload/{report_type_uid}. В параметре report_type_uid укажите нужный тип отчёта, в --form — полный путь к загружаемому файлу. Также укажите в заголовке тип тела запроса: Content-Type: multipart/form-data.

Пример запроса для загрузки файла

curl -X POST \
  --url https://b2b-api.spectrumdata.ru/b2b/api/v1/user/assets/upload/test_report_type@test_domain \
  --header 'Authorization: AR-REST dGVzdF91c2VyQHRlc3RfZG9tYWluOjE0ODM2MzQ3MjM6OTk5OTk5OTk5OjN3ZzgyRXVUd2VjMjkvT3ZRN215eUE9PQ==' \
  --header 'Content-Type: multipart/form-data; boundary=---011000010111000001101001' \
  --form 'file=@C:\path\photo.png'

После получения запроса API проверяет баланс пользователя, сохраняет файл и отправляет пользователю уникальный идентификатор этого файла.

Ответ API включает массив data[], содержащий:

  • уникальный идентификатор объекта uid,
  • служебные логи выполнения транзакции в объекте make_mode_log.

Если при загрузке файла возникла ошибка, API вернёт HTTP-код ошибки и её описание в теле ответа.

Пример ответа при успешном сохранении файла

{
  "state": "ok",
  "size": 1,
  "version": "2.0",
  "stamp": "2022-04-12T13:21:45.065Z",
  "data": [
    {
      "uid": "67af46c589e54d419c0d9693856d6aab@test_domain",
      "make_mode_log": {
        "make_mode": "TRANSACTIONAL_CONDITIONAL_NON_LOCK",
        "need_transaction": true,
        "balance_map": {
          "TOTAL": {
            "quote_init": 10,
            "quote_up": 100,
            "quote_use": 24
          },
          "MONTH": {
            "quote_init": 0,
            "quote_up": 0,
            "quote_use": 0
          },
          "DAY": {
            "quote_init": 0,
            "quote_up": 0,
            "quote_use": 0
          }
        },
        "need_lock": true,
        "need_balance_calculate": true
      }
    }
  ]
}

Получение файла

Для того, чтобы получить объект из хранилища, используйте GET-запрос к /user/assets/download/{uid}. В {uid} укажите уникальный идентификатор объекта, который был получен при сохранении объекта.

{primary.fa-info} Запрос на получение объекта не изменяет баланс. Вы можете обращаться к объекту неограниченное количество раз.

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

При отсутствии в хранилище необходимого файла API вернёт HTTP-код 500 с типом ошибки DataSeekObjectError.

Пример запроса на получение отчёта

curl -X GET \
  --url http://b2b-api.spectrumdata.ru/b2b/api/v1/user/assets/download/67af46c589e54d419c0d9693856d6aab@test_domain \
  --header 'Authorization: AR-REST dGVzdF91c2VyQHRlc3RfZG9tYWluOjE0ODM2MzQ3MjM6OTk5OTk5OTk5OjN3ZzgyRXVUd2VjMjkvT3ZRN215eUE9PQ=='

Пример заголовков ответа

Server: nginx
Date: Fri, 15 Apr 2022 06:54:02 GMT
Content-Type: image/png
Content-Length: 85457
Connection: keep-alive
Vary: Origin
Content-Disposition: attachment; filename=photo.png