К статье
Практический материал

Администрирование · 10 мин

1С-Битрикс: как загрузить файл

Как загрузить файл в 1С-Битрикс: через медиабиблиотеку, инфоблоки, файловый менеджер и программно через API. Ограничения, ошибки и проверка результата.

Загрузка файла в 1С-Битрикс — базовая операция, но способов её выполнить несколько, и выбор зависит от задачи: добавить картинку на страницу, прикрепить документ к элементу инфоблока, залить архив на сервер или загрузить файл программно через API. У каждого варианта свои ограничения по правам, размеру и месту хранения.

Чаще всего проблемы возникают не на этапе самой загрузки, а из-за настроек PHP (лимиты upload_max_filesize и post_max_size), прав доступа к папкам и запрещённых типов файлов. Поэтому ниже разобраны не только шаги загрузки, но и проверка результата, типичные ошибки и способы их устранения.

Способы загрузки файла: какой выбрать

В Битриксе файл можно загрузить четырьмя основными путями: через медиабиблиотеку, через файловый менеджер (раздел «Контент → Файлы и папки»), через свойство инфоблока и программно через API. Дополнительно файлы можно заливать напрямую на сервер по FTP или SSH — это удобно для больших архивов и массовой загрузки.

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

Сравнение вариантов

Медиабиблиотека

Подходит для изображений и медиа на страницах; есть коллекции и поиск, но неудобна для массовой загрузки

Файловый менеджер

Универсальный способ положить файл в любую папку сайта; требует прав на структуру

Свойство инфоблока

Файл привязан к элементу и выводится вместе с ним; не подходит для общих файлов сайта

FTP/SSH в /upload/

Лучший вариант для больших файлов и массовой заливки; обходит лимиты PHP, но требует доступа к серверу

API (CFile)

Для автоматизации и интеграций; требует навыков PHP и аккуратности с правами

Загрузка через медиабиблиотеку

Медиабиблиотека находится в административном разделе: Контент → Медиабиблиотека. Внутри файлы организованы по коллекциям — например, «Изображения для статей» или «Баннеры». Если нужной коллекции нет, создайте её кнопкой «Добавить коллекцию».

Чтобы загрузить файл, откройте коллекцию и нажмите «Добавить элемент» или «Загрузить». Выберите файл на компьютере, при необходимости укажите название и описание — они используются в атрибутах alt и title при вставке изображения на страницу. После сохранения файл доступен для вставки через визуальный редактор: кнопка вставки изображения → вкладка «Медиабиблиотека».

Учтите, что доступ к медиабиблиотеке регулируется правами групп пользователей. Если кнопки загрузки нет, проверьте права: Настройки → Пользователи → Группы пользователей, вкладка доступа к модулю «Медиабиблиотека».

Загрузка через файловый менеджер

Файловый менеджер — это раздел Контент → Файлы и папки. Он показывает реальную структуру сайта на сервере и позволяет загружать файлы в любую доступную папку. Перейдите в нужную директорию (например, /upload/files/) и нажмите «Загрузить файл» на контекстной панели.

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

Порядок действий
  1. 1
    Откройте Контент → Файлы и папки и перейдите в целевую папку
  2. 2
    Нажмите «Загрузить файл» на контекстной панели
  3. 3
    Выберите файл на компьютере, задайте действие при совпадении имён
  4. 4
    Нажмите «Загрузить» и дождитесь завершения
  5. 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/.

Типичные ошибки
01
Загрузка большого файла через админку при низких лимитах PHP — обрыв без понятной ошибки; увеличьте лимиты или залейте по FTP
02
Замена существующего файла с тем же именем — на страницах временно показывается старая версия из кэша; сбросьте кэш и проверьте в инкогнито
03
Загрузка в корень сайта вместо /upload/ — файл теряется среди служебных и может быть удалён при обновлении
04
Раздача прямых ссылок на временные файлы — после очистки tmp-папок ссылки умирают; используйте постоянное хранилище
05
Отсутствие проверки типов в собственной форме загрузки — риск заливки вредоносного скрипта

Если файл загружен по 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, правами на папки и запрещёнными типами файлов — проверяйте их в первую очередь.