Ver Mensaje Individual
  #1 (permalink)  
Antiguo 09/04/2009, 17:17
KarlasBCN
 
Fecha de Ingreso: abril-2009
Mensajes: 6
Antigüedad: 15 años, 1 mes
Puntos: 0
Cliente JAVA para enviar ficheros vía HTTP a servidor PHP

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

Última edición por KarlasBCN; 12/04/2009 a las 18:46