Документация для разработчиков
Темная тема

FileUploader

Общее


Сервис для загрузки файлов.

Из-за особенностей работы класса EntityObject значения пользовательских полей типа "Файл" хранятся в виде числа (int).

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

При этом возможна ситуация, что файл был сохранен, но сам элемент не был сохранен. В этом случае необходимо обязательно удалить "подвисший" файл.

За эти манипуляции отвечает данный сервис.

Инстанс сервиса должен получаться из контейнера.

При создании объекта он регистрирует функцию (через register_shutdown_function), которая будет выполнена при завершении работы php-процесса. Эта функция удалит все несохраненные файлы.

Жизненный цикл выглядит следующим образом:

  1. Есть данные о файле, который надо сохранить для элемента. Файл сохраняется через метод saveFileTemporary.
  2. Во время сохранения элемента будет вызван метод markFileAsPersistent.
  3. Если элемент не был сохранен, то файлы, не помеченные как сохраненные, будут удалены.

Этот жизненный цикл работает в REST и методе Item::setFromCompatibleData.

Методы


Метод Описание С версии
public function saveFileTemporary(Field $field, array $fileData): ?int

  • $field - объект поля. Это должно быть пользовательское поле типа "Файл".
  • $fileData - данные о файле, структура аналогичная массиву с описанием загруженного файла (см. \CFile::MakeFileArray()).
Сохранит данные о файле $fileData для поля $field. В случае успеха вернет ид нового файла.
public function markFileAsPersistent(int $fileId): self
Пометит файл с идентификатором $fileId как сохраненный (который не надо удалять).
public function deleteTemporaryFiles(): self
Удалит все временные файлы.
public function saveFilePersistently(Field $field, array $fileData): ?int
Сохранит файл сразу на постоянной основе. Аргументы аналогичны методу saveFileTemporary.
© «Битрикс», 2001-2024, «1С-Битрикс», 2024