[Json] Agregar archivos al envio, es posible ?

Iniciado por Diabliyo, 11 Octubre 2018, 23:52 PM

0 Miembros y 2 Visitantes están viendo este tema.

Diabliyo

Buenas Foro...

Estoy haciendo un API en PHP, empece mandando informacion de mi Web a mi API sin problema alguno haciendo algo asi:

Código (php) [Seleccionar]
<?
$data= array(
"id_usuario"=>"123456789aa",
"fecha_registro"=>"561651198897", # formato linux
"mail"=>"sucorreo@gmail.com"
);

$curl= curl_init(); # inciamos url
curl_setopt($curl, CURLOPT_URL, "https://api.miweb.com/index.php" );
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 30 );
curl_setopt($curl, CURLOPT_TIMEOUT, 30 );
curl_setopt( $curl, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt( $curl, CURLOPT_CUSTOMREQUEST, "POST" );
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE );
curl_setopt($curl, CURLOPT_HEADER, 1 );
curl_setopt( $curl, CURLOPT_POST, 1 );
curl_setopt( $curl, CURLOPT_HTTPHEADER, array( 'Content-Type: application/json' ) );
curl_setopt( $curl, CURLOPT_POSTFIELDS, json_encode($data) );
$r= curl_exec($curl);
curl_close($curl);

echo "<br><br>Respuesta: ";
print_r( json_decode($r) );
?>

Hasta este punto, mando la informacion a mi API y la guarda, y como resultado me retorna la informacion de confirmacion, pero ahora quiero poder mandar archivos, ya sea una imagen, un archivo de documento, etc... pero me topo con que del lado de mi API el archivo no lleva, nose si sera una restriccion del servidor, pero quiero PRIMERO disipar si es que estoy haciendo mas el envio de datos.

El proceso para mandar el archivo, es el mismo codigo que les mencione arribr, excepto que al array le agrego esto:

Código (php) [Seleccionar]
# nuevo array
$data= array(
"id_usuario"=>"123456789aa",
"fecha_registro"=>"561651198897", # formato linux
"mail"=>"sucorreo@gmail.com",
"imagen"=>urlencode(base64_encode("/path/delusuario/imagenes/laimagen.jpp"))
);


Mi WebService se queda petado... vaya, no es que se trabe, simplemente cuando le embebo al "request" json la imagen, el servidor no me response ninguna respuesta, es mas, hasta he borrado el codigo en el API para solo y unicamente mandar como respuesta un "HOLA", y nada... en cambio si quito la "imagen", si me responde el "HOLA".

Sera que mando mal la imagen ?

Saludos !

EdePC

Saludos,

- Deberías de revisar los Logs para ver que sucede.

- No incluyas el caracter barra ( / ) al inicio de una URL a no ser que se trate de una URL absoluta, "/path/delusuario/imagenes/laimagen.jpp", se es una ruta relativa quita la primera barra: "path/delusuario/imagenes/laimagen.jpp", además veo que dice: laimagen.jpp en lugar de laimagen.jpg, espero que sea un error en el ejemplo  :xD

-- Linux entiende la / como el Root Directory

Diabliyo

Fue un error del ejemplo al escribirlo aqui...

La ruta la he probado poniendola como comentas, y da el mismo detalle... Del lado del CLIENTE verifico y me consta que la imagen es leida por "file_get_contents()", es colocada en el "array" y jsoneada para despues ser enviada por el socket. Pero del lado del Server no puedo recibir la imagen, vaya, por alguna razon que no sale en los Logs de apache puedo constatar que sea error de alguna linea de codigo del lado del servidor api :(

Ahorita lo "resolvi" mandando la URL (http://webcliente.com/tmp/laimagentemporalsubida.jpg), y del lado del Servidor API la bajo haciendo "file_get_contents()" a la URL... Pero no es lo mas optimo...

Saludos !