Как отправить массив файлов на сервер?

Для отправки массива файлов на сервер в 1C-Bitrix вы можете использовать компонент "Форма загрузки файлов" или использовать API-методы.

Прежде всего, убедитесь, что в форме на вашем сайте присутствует input типа "file" с атрибутом "multiple", чтобы пользователь мог выбрать несколько файлов для загрузки.

После того, как пользователь выбрал файлы, вам необходимо обработать эти файлы на сервере. В 1C-Bitrix вы можете использовать следующие методы:

1. CFile::SaveFile

$arSavedFiles = [];
foreach($_FILES["name"] as $key => $name) {
    $tmp_name = $_FILES["tmp_name"][$key];
    $error = $_FILES["error"][$key];
    if($error == UPLOAD_ERR_OK) {
        $arFile = [
            "name" => $name,
            "size" => $_FILES["size"][$key],
            "tmp_name" => $tmp_name,
            "type" => $_FILES["type"][$key],
            "MODULE_ID" => "your_module_id" // типичные значения: "iblock", "catalog" и т.д.
        ];
        $savedFileId = CFile::SaveFile($arFile, "your_folder_path");
        if($savedFileId) {
            $arSavedFiles[] = $savedFileId;
        } else {
            // Обработка ошибок загрузки файла
        }
    } else {
        // Обработка ошибок загрузки файла
    }
}

В этом примере мы используем метод CFile::SaveFile, который принимает массив с информацией о файле и папку, в которую нужно сохранить файл. Мы также добавляем MODULE_ID, чтобы файл был связан с соответствующим модулем 1C-Bitrix.

2. CIBlockElement::SetPropertyValueCode

$arFiles = [];
foreach($_FILES["name"] as $key => $name) {
    $tmp_name = $_FILES["tmp_name"][$key];
    $error = $_FILES["error"][$key];
    if($error == UPLOAD_ERR_OK) {
        $arFile = [
            "name" => $name,
            "size" => $_FILES["size"][$key],
            "tmp_name" => $tmp_name,
            "type" => $_FILES["type"][$key],
            "MODULE_ID" => "your_module_id" // типичные значения: "iblock", "catalog" и т.д.
        ];
        $fileId = CFile::SaveFile($arFile, "your_folder_path");
        if($fileId) {
            $arFiles[] = [
                "VALUE" => $fileId,
                "DESCRIPTION" => "" // Описание файла (необязательно)
            ];
        } else {
            // Обработка ошибок загрузки файла
        }
    } else {
        // Обработка ошибок загрузки файла
    }
}

// Далее обновляем свойство "Файл" элемента инфоблока
$el = new CIBlockElement;
$propCode = "PROPERTY_CODE"; // Код свойства "Файл" (предварительно создан в админке)
$res = $el->Update($elementId, [
    $propCode => $arFiles
]);
if(!$res) {
    // Обработка ошибок обновления свойства
}

В этом примере мы использовали метод CIBlockElement::SetPropertyValueCode, который позволяет задать значение свойства элемента инфоблока. Мы сохраняем идентификаторы загруженных файлов в массив $arFiles и обновляем свойство "Файл" элемента с помощью метода Update.

Оба эти метода позволяют загружать несколько файлов одновременно и обрабатывать ошибки, если они возникнут при загрузке. Важно учесть, что пути идентификаторов загруженных файлов будут относительными и будут указывать на папку upload в корне сайта. Если необходимо получить абсолютный путь к файлу, вы можете использовать метод CFile::GetByID.