-
Роман ЦукановРазработчик
-
Дата публикации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);