es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cargar archivo de imagen utilizando Axios en una aplicación React Native con backend en PHP.

Estoy usando axios para intentar enviar formdata que incluye una imagen desde una aplicación de React Native:

data.append("image", {
            name: "image1",
            type: "image/jpeg",
            file_upload:  file
        });

Recibo esto en el lado del servidor:

[
   "data" =>
   array(1) {
      ["parts"] =>
      array(5) {
         ....
         [4] =>
         array(2) {
            [0] =>
            string(5) "image"
            [1] =>
            array(3) {
               ["name"] =>
               string(6) "image1"
               ["type"] =>
               string(10) "image/jpeg"
               ["file_upload"] =>
               array(5) {
                  ["height"] =>
                  int(3024)
                  ["uri"] =>
                  string(324) "file:///Users/joe/Library/Developer/CoreSimulator/Devices/790...9C/data/Containers/Data/Application/6B54B...27C/Library/Caches/ExponentExperienceData/%2540anonymous%252FProj-f2...E61.jpg"
                  ["type"] =>
                  string(5) "image"
                  ["width"] =>
                  int(4032)
                  ["cancelled"] =>
                  bool(false)
               }
            }
         }
      }
   }
]

Estoy intentando comprobar si tengo un archivo usando:

if(is_uploaded_file($obj['data']['_parts'][4]){}

o

if(is_uploaded_file($obj['data']['parts'][4][1]['file_upload'])){}

Ambos devuelven falso.

No estoy seguro de qué estoy haciendo mal, si es en el lado de envío o si no estoy obteniendo correctamente el archivo.

Edit:

Estoy obteniendo lo que se envía así:

$json = file_get_contents('php://input');
$obj = json_decode($json, TRUE);

$post_image = $obj['data']['parts'][4][1]['file_upload'];

Parece funcionar para todos los demás campos.

Edit 2:

Verifico esto:

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
   echo "método POST";
}

if ($_FILES) {
   echo "existen archivos";
}
else{
   echo "no existen archivos";
}

Obtengo que el método POST es verdadero pero no existen archivos.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Parece que estás intentando subir una imagen desde una aplicación de React Native utilizando Axios, pero estás teniendo problemas para cargar el archivo correctamente.

    En primer lugar, es importante tener en cuenta que is_uploaded_file() se utiliza para comprobar si un archivo fue cargado mediante una solicitud HTTP POST. Sin embargo, en tu caso, estás utilizando Axios para cargar el archivo, no una solicitud HTTP POST tradicional.

    En su lugar, deberías utilizar move_uploaded_file() para mover el archivo cargado al directorio de tu servidor.

    Aquí tienes un ejemplo de cómo podrías modificar tu código del lado del servidor para manejar el archivo cargado:

    $json = file_get_contents('php://input');
    $obj = json_decode($json, TRUE);
    
    $image = $obj['data']['_parts'][4][1]['file_upload'];
    
    $target_dir = 'uploads/';
    $target_file = $target_dir . basename($image["name"]);
    
    if (move_uploaded_file($image["uri"], $target_file)) {
      echo "El archivo ". basename( $image["name"]). " ha sido cargado.";
    } else {
      echo "Lo siento, hubo un error al cargar tu archivo.";
    }
    

    Este código moverá el archivo de imagen cargado a una carpeta llamada “uploads” en el directorio de tu servidor, conservando el nombre original del archivo.

    ¡Espero que esto te ayude con tu problema de carga de archivos!

Comments are closed.