FileUploader
Общее
Сервис для загрузки файлов.
Из-за особенностей работы класса EntityObject
значения пользовательских полей типа "Файл" хранятся в виде числа (int).
Соответственно, на момент записи значения в объект элемента файл уже должен быть сохранен в базе данных.
При этом возможна ситуация, что файл был сохранен, но сам элемент не был сохранен. В этом случае необходимо обязательно удалить "подвисший" файл.
За эти манипуляции отвечает данный сервис.
Инстанс сервиса должен получаться из контейнера.
При создании объекта он регистрирует функцию (через register_shutdown_function
), которая будет выполнена при завершении работы php-процесса
. Эта функция удалит все несохраненные файлы.
Жизненный цикл выглядит следующим образом:
- Есть данные о файле, который надо сохранить для элемента. Файл сохраняется через метод
saveFileTemporary
. - Во время сохранения элемента будет вызван метод
markFileAsPersistent
. - Если элемент не был сохранен, то файлы, не помеченные как сохраненные, будут удалены.
Этот жизненный цикл работает в REST и методе Item::setFromCompatibleData
.
Методы
Метод | Описание | С версии |
---|---|---|
public function saveFileTemporary(Field $field, array $fileData): ?int
|
Сохранит данные о файле $fileData для поля $field. В случае успеха вернет ид нового файла. | |
public function markFileAsPersistent(int $fileId): self |
Пометит файл с идентификатором $fileId как сохраненный (который не надо удалять). | |
public function deleteTemporaryFiles(): self |
Удалит все временные файлы. | |
public function saveFilePersistently(Field $field, array $fileData): ?int |
Сохранит файл сразу на постоянной основе. Аргументы аналогичны методу saveFileTemporary . |