dmitriy154
@dmitriy154
Голова, два уха

Как отправить данные разных типов (json и formdata) методом POST?

Уважаемые программисты, нужен ваш совет. Я научился отправлять данные объекта js и canvas (картинка) на сервер php.
Т.е. у меня есть объект js с данными let obj={name:"Tom", age:'30'} и несколько картинок.
У меня не получается их отправить и принять одновременно на стороне сервера. Как я думаю, необходимо поочередно вызывать методы fetch или как лучше, прошу помощи. Заранее всем спасибо!
btn_send.addEventListener('click',async() => {
          //отправляем объект 
		let response = await fetch('web_tp_word.php', {
		method: 'POST',
		headers: {
		  'Content-Type': 'application/json;charset=utf-8'
		},
		body: JSON.stringify(data)
		});
		if (response.ok) let json = await response.json();
		
                 //отправляем картинку канвас
		let blob = await new Promise(resolve => canvasElem.toBlob(resolve, 'image/png'));
		let formData = new FormData(); 
		formData.append('canvas_field', blob, 'canvas.png'); 
		let response2 = await fetch('web_tp_word.php', {
		method: 'POST',
		body: formData 
		});

});


серверу не удается их принять одновременно:
//1. получаем данные JSON
$postData = file_get_contents('php://input'); 
$data = json_decode($postData, true);
//2. пытаемся получить одну картинку
if (!@copy($_FILES['canvas_field']['tmp_name'], $path . $_FILES['canvas_field']['name']))
echo 'Что-то пошло не так';
else
echo 'Загрузка удачна <a href="' . $path . $_FILES['canvas_field']['name'] . '">Посмотреть</a> ' ;
  • Вопрос задан
  • 983 просмотра
Решения вопроса 1
zkrvndm
@zkrvndm
Архитектор решений
Все проще, чем вы думаете:
formData.append('canvas_field', blob, 'canvas.png'); 
formData.append('name', 'Tom'); 
formData.append('age', '30');

На сервере смотрите содержимое суперглобальных переменных $_POST и $_FILES.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы