Блог Горошко Андрея 1C-Битрикс Управление файлами в Битрикс с помощью CFile: Сохранение, ресайз и удаление

Управление файлами в Битрикс с помощью CFile: Сохранение, ресайз и удаление

Работа с файлами — неотъемлемая часть веб-разработки. В Битрикс для этого существует мощный класс CFile. Он не просто работает с файлами на диске, но и регистрирует их в специальной таблице базы данных (b_file), что позволяет системе управлять ими централизованно.

Как Битрикс хранит файлы?

Когда вы загружаете файл через CFile, происходит два действия:

  1. Файл физически сохраняется в папку /upload/.
  2. В таблицу b_file добавляется запись с информацией о файле (имя, размер, путь и т.д.). Эта запись получает уникальный ID.

В дальнейшем все операции с файлом (получение пути, удаление) производятся именно по этому ID.

Шаг 1: Подготовка массива файла — CFile::MakeFileArray

Прежде чем сохранить файл, его нужно представить в виде специального массива. Метод MakeFileArray унифицирует данные, полученные из формы ($_FILES) или с локального диска.

Синтаксис: CFile::MakeFileArray($file_path_or_id)

// Из массива $_FILES
$arFile = $_FILES['MY_PICTURE'];

// Из локального пути на сервере
$arFile = CFile::MakeFileArray($_SERVER["DOCUMENT_ROOT"]."/images/my_photo.jpg");

/*
Результат (массив $arFile) будет иметь структуру:
[
    'name' => 'my_photo.jpg',
    'size' => 12345,
    'tmp_name' => '/tmp/php...',
    'type' => 'image/jpeg'
]
*/

Шаг 2: Сохранение файла — CFile::SaveFile

Этот метод берет подготовленный массив, сохраняет файл и регистрирует его в b_file.

Синтаксис: CFile::SaveFile($arFile, «папка_для_сохранения»)

// Пример сохранения файла, загруженного через форму, в свойство элемента инфоблока
$el = new CIBlockElement;

$arFile = $_FILES['DETAIL_PICTURE'];
$fileId = CFile::SaveFile($arFile, "iblock"); // Сохраняем в /upload/iblock/

if ($fileId) {
    $arFields = [
        "IBLOCK_ID" => 5,
        "NAME" => "Элемент с картинкой",
        "DETAIL_PICTURE" => $fileId // Привязываем файл по ID
    ];
    $el->Add($arFields);
}

Шаг 3: Получение пути к файлу — CFile::GetPath

Зная ID файла, можно в любой момент получить к нему путь от корня сайта.

Синтаксис: CFile::GetPath($fileId)

$fileId = 123;
$filePath = CFile::GetPath($fileId); // вернет, например, "/upload/iblock/abc/my_photo.jpg"
echo '<img src="'.$filePath.'" alt="">';

Шаг 4: Ресайз изображений — CFile::ResizeImageGet

Это одна из самых полезных функций CFile. Она на лету создает уменьшенную копию (thumbnail) изображения, кэширует ее и возвращает путь.

Синтаксис: CFile::ResizeImageGet($file, $arSize, $resizeType, $bInitSizes)

  • $file: ID файла или массив файла.
  • $arSize: Массив вида [‘width’ => 150, ‘height’ => 150].
  • $resizeType: Тип ресайза:
    • BX_RESIZE_IMAGE_EXACT: Точные размеры (может обрезать).
    • BX_RESIZE_IMAGE_PROPORTIONAL: Пропорционально, вписывая в рамки.
    • BX_RESIZE_IMAGE_PROPORTIONAL_ALT: Пропорционально, но размеры могут быть чуть больше рамки.
  • $bInitSizes: Обычно true.

Пример в шаблоне компонента:

// $arItem['PREVIEW_PICTURE'] содержит ID картинки
if ($arItem['PREVIEW_PICTURE']) {
    $renderImage = CFile::ResizeImageGet(
        $arItem['PREVIEW_PICTURE'],
        ['width' => 200, 'height' => 200],
        BX_RESIZE_IMAGE_PROPORTIONAL,
        true
    );
    
    echo '<img src="'.$renderImage['src'].'" width="'.$renderImage['width'].'" height="'.$renderImage['height'].'" alt="">';
}

Шаг 5: Удаление файла — CFile::Delete

Удаляет запись из b_file и сам файл с диска.

Синтаксис: CFile::Delete($fileId)

$fileIdToDelete = 123;
CFile::Delete($fileIdToDelete);

Вывод:
Класс CFile — это централизованный и надежный способ управления файлами в Битрикс. Он избавляет от необходимости вручную работать с файловой системой и предоставляет мощные инструменты, такие как ResizeImageGet, которые значительно упрощают разработку и улучшают производительность сайта.


CFile, MakeFileArray, SaveFile, GetPath, Delete, ResizeImageGet, файлы Битрикс, загрузка файлов, ресайз изображений.

Похожая задача в бизнесе?

Помогу автоматизировать процессы и внедрить ИИ

Меня зовут Андрей Горошко. Я Full-stack разработчик и эксперт по 1С-Битрикс. Настраиваю CRM Битрикс24, разрабатываю защищенные API и создаю умных ИИ-агентов для автоматизации рутины.

Добавить комментарий

Related Post

Манипуляции с URL в D7: Класс Bitrix\Main\Web\Uri (добавление, удаление параметров, парсинг)Манипуляции с URL в D7: Класс Bitrix\Main\Web\Uri (добавление, удаление параметров, парсинг)

Работа с URL — рутинная задача: добавить GET-параметр, удалить «мусор», получить домен. В старом ядре использовались функции вроде $APPLICATION->GetCurPageParam. В D7 появился специализированный класс \Bitrix\Main\Web\Uri, который делает эту работу объектно-ориентированной и безопасной.

Интеграция сервиса Яндекс Доставка и Яндекс Go с 1С-БитриксИнтеграция сервиса Яндекс Доставка и Яндекс Go с 1С-Битрикс

Бесшовная интеграция сайта на 1С-Битрикс с внешними системами — это ключевое условие автоматизации продаж и масштабирования бизнеса. Услуга «Интеграция сервиса Яндекс Доставка и Яндекс Go с 1С-Битрикс» обеспечивает экспресс-доставка заказов

Как использовать метод SDK sale.propertygroup.delete в Битрикс24Как использовать метод SDK sale.propertygroup.delete в Битрикс24

Эффективная интеграция и кастомизация функционала в Битрикс24 часто требует работы на уровне API. Сегодня мы подробно рассмотрим «Как использовать метод SDK sale.propertygroup.delete в Битрикс24». Вы узнаете экспертные методики работы с