@lexstile

Как отправить файл через FormData + phpMailer?

На submit формы:
const files = $(this).find('[name="files"]').get(0).files;
		const formData = new FormData();
		formData.append('message', message);
		if (files.length > 0) {
			jQuery.each(files, (i, file) => formData.append('files[]', file));
		}
		// settings request
		url: 'mailer/send_letter.php',
		type: 'post',
		processData: false,
		contentType: false,
		data: formData,

на бэк приходит:
// exit(json_encode($_FILES));
		"files":{"name":["2a1842f5b4924bd3a1d8a49366901b3c.jpg","061518_1849_1.jpg"],"type":["image\/jpeg","image\/jpeg"],"tmp_name":["\/tmp\/phpkvVvDC","\/tmp\/phpiz70oj"],"error":[0,0],"size":[124537,79068]}

		// обработка
		if (isset($_FILES['files'])) {
			foreach($_FILES['files'] as $position => $file)
			{
				if($_FILES['files']['error'][$position] !== 0) continue;
				$name = $_FILES['files']['name'][$position];
				$path = $_FILES['files']['tmp_name'][$position];
				 
				$mail->addAttachment($path, $name);
			}
		}


Текст сообщения приходит, файлы нет. Что я делаю не так?
  • Вопрос задан
  • 177 просмотров
Пригласить эксперта
Ответы на вопрос 1
zkrvndm
@zkrvndm
Архитектор решений
Попробуйте отправить форму на чистом JS, возможно так заработает:
<script type="text/javascript">

  // По готовности страницы, вешаем на форму обрабочтик onsubmit инлайново:
  document.addEventListener('DOMContentLoaded', function() {
    document.querySelector('form#FORM_ID').setAttribute('onsubmit', 'event.preventDefault(); form_send(this);');
  });

  // Фуцнкция для отправки формы на чистом JavaScript:
  function form_send(form) {
    var url = form.getAttribute('action') + '?time=' + new Date().getTime();
    var xhr = new XMLHttpRequest(); xhr.open('POST', url);
    xhr.onreadystatechange = function() {
      if (xhr.readyState === XMLHttpRequest.DONE) {
        if (xhr.status === 200) {
          form.setAttribute('onsubmit', 'event.preventDefault();');
          form.innerHTML = xhr.responseText;
        }
        else {
          alert('При отправке формы произошла ошбика, детали смотрите в консоли.');
          console.log('При отправке формы произошла ошбика, ниже объект с деталями ошибки:');
          console.dir(xhr);
        }
      }
    }
    xhr.send(new FormData(form));
  }
  
</script>

Замените FORM_ID на идентификатор вашей формы. Убедитесь, что у вашей формы прописан атрибут action.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
27 нояб. 2024, в 13:07
10000 руб./за проект
27 нояб. 2024, в 12:53
70000 руб./за проект
27 нояб. 2024, в 12:50
25000 руб./за проект