Hola a todos, es la primera vez que posteo, espero hacerlo todo bien ;)
Resulta que estoy tratando de implementar una aplicación en java que envíe un fichero a un servidor PHP. El fichero es siempre el mismo (smiley.jpg). Este es el código:
Código:
import java.net.*;
import java.io.*;
public class envia {
public static void main(String[] args) {
try
{
//Leo fichero
String filename="smiley.jpg";
BufferedReader reader = new BufferedReader(new FileReader(filename));
String lineaTotal="";
String linea = reader.readLine();
while (linea != null)
{
lineaTotal = lineaTotal + linea;
linea = reader.readLine();
}
String envio=lineaTotal;
System.out.println("TAMAÑO KILOBYTES: "+(lineaTotal.length()/1024));
reader.close();
//Propiedades conexión
String URLdestino ="ruta_al_servidor"; //ruta donde está el script PHP
URL postURL = new URL(URLdestino);
HttpURLConnection con = (HttpURLConnection) postURL.openConnection();
con.setUseCaches(false);
con.setDoOutput(true);
con.setDoInput(true);
con.setRequestMethod("POST");
con.setRequestProperty("Content-Type", "multipart/form-data");
//Envío de datos
OutputStream stream = con.getOutputStream();
DataOutputStream dos = new DataOutputStream(stream);
System.out.println("DATOS ENVIADOS AL SERVIDOR!");
dos.writeBytes(envio);
dos.close();
//Respuesta del servidor
linea="";
String resultado="";
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
while ((linea = in.readLine()) != null) resultado+=linea;
in.close();
System.out.println("RESPUESTA DEL SERVIDOR:");
System.out.println(resultado);
}
catch(Exception e){
System.out.println(e);
}
}
}
Para comprobar que el PHP ha recibido correctamente el fichero, simplemente ejecuto lo siguiente:
print_r($_FILES);
pero la respuesta que recibe el cliente java es "Array()", es decir, que no ha recibido nada. En cambio, si envío el fichero al mismo script mediante un formulario HTML, todo va correctamente (es decir muestra un Array con la información del fichero subido).
Si alguien sabe ver que hay de erróneo en el código java, me salvará de una buena ;)
También había pensado enviar mediante post en un string el contenido del fichero para que luego PHP cree un archivo con ese contenido, pero al hacer un strlen de lo recibido, me dice que el PHP solo ha recibido 393 (o algo así) bytes, no se si es que hay algo malo en el código, es el protocolo en sí que solo permite enviar strings de hasta este tamaño, o es cuestión de alguna restricción del servidor.
Gracias a todos por adelantado