En mi aplicación, en una página en particular, el usuario puede cargar una imagen y completar varios campos. Envío esos datos al servidor web (php) usando un AJAX POST. Los datos se configuran usando FormData así:
var formData = new FormData(); formData.append('image', this.imageUploadField.files[0]); formData.append('levelName', this.nameField.value); formData.append('cost', this.monthlyCostField.value); xhttp.open("POST", "http://example.com"); xhttp.setRequestHeader("Content-Type", "multipart/form-data"); xhttp.send(formData);Recupero el lado del servidor de imágenes temporales con $_FILES. Luego necesito enviar esa imagen y datos a una API REST para su procesamiento, sin embargo, tengo problemas para hacerlo. Así es como estoy enviando la imagen a través del servidor web. El primer problema es que llega a la API y solo se puede recuperar a través de $_POST global, sin nombre de archivo, ruta, etc., lo cual no entiendo.
$data = file_get_contents('php://input'); // Setup http request $options = ["http" => ["method" => "POST", "header" => "Content-Type: multipart/form-data", "content" => $data, "header" => "Authorization: " . $_SESSION['token'] ] ]; // Call API $apiResponse = file_get_contents($apiUrl, NULL, stream_context_create($options));¿Cómo hago para enviar la imagen y los datos al servidor API? Tenga en cuenta que no estoy usando curl. También debo tener en cuenta que tanto el servidor web como la API se están ejecutando en mi localhost en este momento.
ACTUALIZACIÓN: Para agregar más detalles. Después de implementar multipart/form-data, así es como se ve cuando print_r($_POST); :
------WebKitFormBoundaryI96wB7anw56O2g4M Contenido-Disposición: formulario-datos; nombre="imagen"; filename="blue_tier.png" Tipo de contenido: imagen/png
Datos binarios
------WebKitFormBoundaryI96wB7anw56O2g4M Contenido-Disposición: formulario-datos; nombre="nombreNivel"
Nombre de prueba ------WebKitFormBoundaryI96wB7anw56O2g4M Disposición de contenido: datos de formulario; nombre = "costo"
4.99
Parece que no puedo llegar a los datos. $_POST['levelName'] por ejemplo es nulo.