Как отправить данные формы по API с прикрепленным файлом PDF при клике ? Мне нужно отправить
Base64 binary по API для того чтоб с другого хоста можно было скачать. Для этого я с JS собираю данные, отправляю в обработку PHP.
<form enctype="multipart/form-data" id="userForm" name="userForm">
<input type="text" name="FirstName" id="FirstName">
<input type="text" name="LastName" id="LastName">
<input type="email" name="Email" id="Email">
<input type="file" name="file" id="file" multiple accept="application/pdf" >
<button class="send" id="send-data">Send</button>
</form>
Тут с помощью JS собираю все данные формы.
jQuery(document).ready(function($){
$('#send-data').on('click', function(e){
e.preventDefault();
var formData = new FormData($(this).parents('form')[0]);
formData.append('action', 'soap_post');
$.ajax({
url: '<?php echo admin_url("admin-ajax.php") ?>',
type: 'POST',
data: formData,
contentType: false,
processData: false,
success: function( data ) {
console.log( data );
}
});
});
});
Тут я сохраняю файл в нужном директиве.
Вопрос : Можно ли не сохранят файл а сразу же конвертировать данные внутри $_FILE и отправить ? или нужно файл с директории конвертировать и после отправки удалить с директории ? Тут запутался) можете разъяснить логику как все это правильно работает ?
add_action("wp_ajax_soap_post", "soap_post");
add_action("wp_ajax_nopriv_soap_post", "soap_post");
function soap_post() {
$firstName = $_POST['FirstName'];
$lastName = $_POST['LastName'];
$email = $_POST['EmailAddress'];
$arr_img_ext = array('application/pdf', 'image/png', 'image/jpeg', 'image/jpg', 'image/gif');
for($i = 0; $i < count($_FILES['application']['name']); $i++) {
if (in_array($_FILES['application']['type'][$i], $arr_img_ext)) {
$upload = wp_upload_bits($_FILES['application']['name'][$i], null, file_get_contents($_FILES['application']['tmp_name'][$i]));
}
}
$soapUrl = 'https://url.com/api';
$headers = array(
"Content-type: text/xml",
"HOST: host.com.test",
"Cache-Control: no-cache",
);
$xml_post_string = '<?xml version = "1.0" encoding = "utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<Application xmlns="http://www.testhost.ch">
<item>
<FirstName>'.$firstName.'</FirstName>
<LastName>'.$lastName.'</LastName>
<EmailAddress>'.$email.'</EmailAddress>
<File>// Base64 binary</File>
</item>
</Application >
</soap:Body>
</soap:Envelope>';
$ch = curl_init($soapUrl);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: text/xml'));
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "$xml_post_string");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($ch);
curl_close($ch);
die();
}