Загрузка и сохранение одного или нескольких файлов в 1С Битрикс через Ajax

  • Роман Цуканов
    Разработчик
  • Дата публикации
    13.01.2025
  • Категория
    1С-Битрикс
Задача:Загружать/менять изображения, загруженные при помощи ajax. Сохранять данные изображения во множественное доп. поле элемента.

Периодически возникает необходимость в загрузке и сохранении файлов в доп. поле элемента инфоблока 1С Битрикс. Данная статья про то как это можно легко реализовать.

По аналогии с данной статьей создадим форму и напишем код JS:

<form action="uploadFiles.php" id="upload-files" enctype="multipart/form-data">
    <input type="file" id="files" name="additional-files[]"> <button type="submit">Сохранить</button> </form>
$('#upload-files').on('submit', function(event) {
	event.preventDefault();
	var formData = new FormData(this);
	$.ajax({
		url: $(this).attr('action'),
		type: 'POST',
		cache:false,
		dataType: 'json',
		data: formData,
		processData: false,
		contentType: false,
		enctype: 'multipart/form-data',
		success: function(result) {
			console.log(result.status);
			if(result.status == 'success'){
				window.location.reload();
			}
		}
	});
});

А теперь обработчик на стороне сервера. Для наглядности пропишем здесь вручную все параметры массива файла для сохранения во множественное дополнительное поле. Чтоб было понятнее, что необходимо для корректной работы скрипта:

if(!empty($_FILES["additional-files"]['name'])) {

    foreach ($_FILES["additional-files"]['name'] as $key => $file) {

        $newFileArray = array(
            "name" => $file,
            "full_path" => $_FILES["additional-files"]["full_path"][$key],
            "type" => $_FILES["additional-files"]["type"][$key],
            "tmp_name" => $_FILES["additional-files"]["tmp_name"][$key],
            "error" => $_FILES["additional-files"]["error"][$key],
            "size" => $_FILES["additional-files"]["size"][$key],
        );

        $args['ADDITIONAL_FILES'][] = array('VALUE' => $newFileArray, 'DESCRIPTION' =>'');
    }
}

CIBlockElement::SetPropertyValuesEx($elementId, $iblockId, $args);

 

Еще нет коммментариев. Будь первым!