Задать вопрос
  • Как преобразовать несколько файлов с поля мультизагрузки файлов в Base64 и передать результат конвертации на сервер единым массивом?

    tomdropov90
    @tomdropov90 Автор вопроса
    Мою проблему решил chatGPT :)

    document.addEventListener('DOMContentLoaded', () => {
      const inputFilePhoto = document.querySelector('.js-add-photo-new-car');
      const obProfileForm = document.querySelector('.js-lk-garage-new-car-form');
    
      obProfileForm.addEventListener('submit', async (e) => {
        e.preventDefault();
    
        const formData = new FormData(obProfileForm);
        const filePhoto = inputFilePhoto.files[0];
        const arrFiles = inputFilePhoto.files;
    
        if (arrFiles) {
          try {
            const fileBase64Promises = Array.from(arrFiles).map((file) => {
              const reader = new FileReader();
              reader.readAsDataURL(file);
              return new Promise((resolve, reject) => {
                reader.onload = () => {
                  resolve(reader.result);
                };
                reader.onerror = () => {
                  reject(reader.error);
                };
              });
            });
            const fileBase64Arr = await Promise.all(fileBase64Promises);
            fileBase64Arr.forEach((fileBase64) => {
              formData.append('PHOTO', fileBase64);
            });
          } catch (error) {
            console.error('Error reading file:', error);
          }
        }
    
        formData.append('sessid', BX.message('bitrix_sessid'));
        addPersonalAuto(formData);
      });
    });


    Вот краткое изложение изменений:

    Средство чтения файлов теперь обернуто обещанием, чтобы упростить асинхронное чтение файлов.
    Код теперь поддерживает загрузку нескольких файлов.
    Метод readAsDataURL() теперь вызывается только один раз для каждого файла, а не дважды, как в исходном коде.
    Переменная filePhoto не используется, поэтому она была удалена.
    Блок if (arrFiles) был упрощен, чтобы уменьшить дублирование кода.
    Объект FormData обновляется только параметром sessid и параметром PHOTO после чтения файлов, чтобы уменьшить дублирование кода.
    Функция addPersonalAuto() вызывается с объектом formData в качестве единственного параметра, чтобы код оставался кратким.
    Ответ написан
    Комментировать