Администрирование · 10 мин
1С-Битрикс: как загрузить файл
Как загрузить файл в 1С-Битрикс: через медиабиблиотеку, инфоблоки, файловый менеджер и программно через API. Ограничения, ошибки и проверка результата.
Загрузка файла в 1С-Битрикс — базовая операция, но способов её выполнить несколько, и выбор зависит от задачи: добавить картинку на страницу, прикрепить документ к элементу инфоблока, залить архив на сервер или загрузить файл программно через API. У каждого варианта свои ограничения по правам, размеру и месту хранения.
Чаще всего проблемы возникают не на этапе самой загрузки, а из-за настроек PHP (лимиты upload_max_filesize и post_max_size), прав доступа к папкам и запрещённых типов файлов. Поэтому ниже разобраны не только шаги загрузки, но и проверка результата, типичные ошибки и способы их устранения.
Способы загрузки файла: какой выбрать
В Битриксе файл можно загрузить четырьмя основными путями: через медиабиблиотеку, через файловый менеджер (раздел «Контент → Файлы и папки»), через свойство инфоблока и программно через API. Дополнительно файлы можно заливать напрямую на сервер по FTP или SSH — это удобно для больших архивов и массовой загрузки.
Выбор зависит от того, где файл будет использоваться. Картинки для страниц удобнее держать в медиабиблиотеке — там есть структура коллекций и вставка через визуальный редактор. Документы, привязанные к товарам или новостям, логичнее хранить в свойствах инфоблока — тогда они выводятся вместе с элементом. Служебные файлы (прайсы, выгрузки) проще класть напрямую в папку /upload/.
Сравнение вариантов
Подходит для изображений и медиа на страницах; есть коллекции и поиск, но неудобна для массовой загрузки
Универсальный способ положить файл в любую папку сайта; требует прав на структуру
Файл привязан к элементу и выводится вместе с ним; не подходит для общих файлов сайта
Лучший вариант для больших файлов и массовой заливки; обходит лимиты PHP, но требует доступа к серверу
Для автоматизации и интеграций; требует навыков PHP и аккуратности с правами
Загрузка через медиабиблиотеку
Медиабиблиотека находится в административном разделе: Контент → Медиабиблиотека. Внутри файлы организованы по коллекциям — например, «Изображения для статей» или «Баннеры». Если нужной коллекции нет, создайте её кнопкой «Добавить коллекцию».
Чтобы загрузить файл, откройте коллекцию и нажмите «Добавить элемент» или «Загрузить». Выберите файл на компьютере, при необходимости укажите название и описание — они используются в атрибутах alt и title при вставке изображения на страницу. После сохранения файл доступен для вставки через визуальный редактор: кнопка вставки изображения → вкладка «Медиабиблиотека».
Учтите, что доступ к медиабиблиотеке регулируется правами групп пользователей. Если кнопки загрузки нет, проверьте права: Настройки → Пользователи → Группы пользователей, вкладка доступа к модулю «Медиабиблиотека».
Загрузка через файловый менеджер
Файловый менеджер — это раздел Контент → Файлы и папки. Он показывает реальную структуру сайта на сервере и позволяет загружать файлы в любую доступную папку. Перейдите в нужную директорию (например, /upload/files/) и нажмите «Загрузить файл» на контекстной панели.
В форме загрузки можно выбрать несколько файлов сразу и указать, что делать при совпадении имён: переименовать новый файл или заменить существующий. Будьте осторожны с заменой: если на старый файл ссылаются страницы сайта, он изменится везде, а кэш браузеров может временно показывать старую версию.
- 1Откройте Контент → Файлы и папки и перейдите в целевую папку
- 2Нажмите «Загрузить файл» на контекстной панели
- 3Выберите файл на компьютере, задайте действие при совпадении имён
- 4Нажмите «Загрузить» и дождитесь завершения
- 5Проверьте, что файл появился в списке и открывается по прямой ссылке
Загрузка файла в элемент инфоблока
Если файл должен быть привязан к конкретному элементу — товару, новости, статье — используйте свойство типа «Файл». Сначала проверьте, что такое свойство есть: Контент → Инфоблоки → Типы инфоблоков, откройте нужный инфоблок, вкладка «Свойства». Если свойства нет, добавьте его с типом «Файл» и символьным кодом, например DOCUMENT.
Дальше откройте элемент инфоблока на редактирование, найдите поле свойства и загрузите файл стандартной кнопкой выбора. После сохранения элемента файл попадёт в систему хранения Битрикса (таблица b_file, физически — в /upload/iblock/...), а его ID будет привязан к элементу.
Для вывода файла в публичной части в шаблоне компонента используйте CFile::GetPath($arItem["PROPERTIES"]["DOCUMENT"]["VALUE"]) или готовые поля в шаблоне, если компонент выводит свойства автоматически. Для изображений удобно сразу ресайзить: CFile::ResizeImageGet().
Программная загрузка через API
Для автоматической загрузки — из формы на сайте, при обмене с 1С или в скрипте импорта — используется класс CFile. Базовый сценарий: принять файл из массива $_FILES, передать его в CFile::SaveFile() и получить ID файла в системе.
<?php
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");
if (!empty($_FILES["userfile"]["tmp_name"])) {
$fileId = CFile::SaveFile($_FILES["userfile"], "custom_uploads");
if ($fileId) {
echo "Файл загружен, ID: " . $fileId;
$path = CFile::GetPath($fileId);
} else {
echo "Ошибка загрузки";
}
}
?>
Второй параметр SaveFile — имя подпапки внутри /upload/, куда будет сохранён файл. Для привязки к элементу инфоблока полученный ID передаётся в свойство при вызове CIBlockElement::SetPropertyValuesEx() или Update().
Важно: скрипт с прямой загрузкой не должен быть доступен анонимным пользователям без проверок. Минимум — проверка авторизации или токена, ограничение типов файлов и размера. Открытая форма загрузки без фильтрации — классический вектор заливки вредоносного кода.
Ограничения по размеру и типам файлов
Даже если в Битриксе всё настроено верно, загрузку может обрезать PHP. Ключевые директивы: upload_max_filesize (максимальный размер одного файла), post_max_size (максимальный размер всего POST-запроса, должен быть больше предыдущей) и max_execution_time (лимит времени выполнения скрипта — критично для медленных каналов). Значения смотрятся в phpinfo или в админке: Настройки → Инструменты → Проверка системы.
Типы разрешённых файлов задаются в настройках главного модуля: Настройки → Настройки продукта → Настройки модулей → Главный модуль, поля с расширениями. Если при загрузке появляется ошибка «недопустимый тип файла», причина почти всегда здесь.
Как проверить результат
Файл виден в медиабиблиотеке или файловом менеджере с корректным размером
Файл отсутствует или размер 0 байт — загрузка не завершилась
Файл открывается/скачивается по прямому URL в браузере
404 или 403 — файл не на месте либо нет прав на папку
Изображение или ссылка отображаются в публичной части
Битая ссылка — проверьте ID файла и шаблон вывода
Файл читается веб-сервером (типично 644 для файлов, 755 для папок)
Ошибка доступа — поправьте права по SSH или через хостинг-панель
Типичные ошибки и их устранение
Самая частая ситуация — загрузка молча обрывается или выдаёт пустую страницу. Почти всегда это упор в post_max_size или таймаут. Вторая по частоте — «недопустимый тип файла» из-за настроек главного модуля. Третья — файл загрузился, но не открывается из-за прав на папку /upload/.
Если файл загружен по FTP напрямую в /upload/, он не появится в медиабиблиотеке автоматически — Битрикс ведёт собственный реестр файлов в базе. Такой файл доступен по прямой ссылке, но для использования в инфоблоках его нужно зарегистрировать через CFile::MakeFileArray() с последующим сохранением.
Часто задаваемые вопросы
Куда физически попадают загруженные файлы?
Все файлы, загруженные через админку и API, хранятся в папке /upload/ с разбивкой по подпапкам: iblock — файлы инфоблоков, medialibrary — медиабиблиотека, main — служебные. Записи о файлах хранятся в таблице b_file, поэтому переносить их между серверами нужно вместе с базой или через штатные механизмы.
Почему файл больше 2 МБ не загружается?
Значение по умолчанию upload_max_filesize во многих конфигурациях PHP — 2M. Увеличьте upload_max_filesize и post_max_size в php.ini, .htaccess или через панель хостинга, затем проверьте результат в «Проверке системы» админки. На виртуальном хостинге без доступа к настройкам PHP заливайте большие файлы по FTP.
Как загрузить сразу много файлов?
В файловом менеджере можно выбрать несколько файлов в одной форме. Для десятков и сотен файлов удобнее залить их по FTP/SSH в нужную папку /upload/. Если файлы должны попасть в инфоблоки, используйте скрипт с CFile::SaveFile() в цикле или штатный импорт.
Можно ли ограничить, кто может загружать файлы?
Да. Права на медиабиблиотеку настраиваются в группах пользователей, доступ к папкам файлового менеджера — через права на файлы и папки в структуре сайта. Для собственных форм загрузки проверяйте авторизацию через $USER->IsAuthorized() и права на конкретный раздел.
Файл загрузился, но на сайте битая ссылка. Что делать?
Проверьте три вещи: существует ли файл физически (откройте прямой URL), корректен ли ID файла в привязке к элементу и не отдаёт ли сервер 403 из-за прав. Если путь формируется через CFile::GetPath(), убедитесь, что в шаблон передаётся именно ID файла, а не массив свойства целиком.
Как удалить загруженный файл полностью?
Удаление элемента инфоблока удаляет и привязанные файлы. Отдельный файл из свойства удаляется при редактировании элемента. Через API используйте CFile::Delete($fileId) — это уберёт и запись в базе, и физический файл. Удаление файла только с диска оставит «мёртвую» запись в b_file и битые ссылки.
Что важно запомнить
Для разовой загрузки используйте медиабиблиотеку или файловый менеджер, для привязки к элементам — свойство «Файл» инфоблока, для автоматизации — CFile::SaveFile, для больших объёмов — FTP в /upload/. Большинство проблем связано с лимитами PHP, правами на папки и запрещёнными типами файлов — проверяйте их в первую очередь.