Subir archivos a un servidor

Nacho
26 de Diciembre del 2008
Hola a todos, estoy haciendo un applet (java) en el cual, una de sus funciones es subir archivos al servidor y depositarlos en alguna carpeta.

He estado mirando por internet y los únicos códigos que veo son con funciones php, jsp... para páginas web como formulario, pero no he visto ningún código para un programa de java. ¿Alguien sabe donde puedo encontrar código que haga lo que quiero hacer?

Muchísimas gracias a todos.

daniel oberti
26 de Diciembre del 2008
Bueno... la tecnologia applet tiene restricciones de seguridad para poder acceder a los archivos de un cliente, por lo cual para que tu applet funcione, primero deberas validarlo con un certificado de seguridad. Esto no es muy complicado, lo puedes encontrar facilmente en la web.
Lo que tienes que tener en cuenta, es que si quieres crear un certificado de seguridad free, lo deberas renovar cada 120 días.
Es por ello que es raro encontrar ejemplos del tipo que tu buscas, sencillamente es porque hay otras tecnologias como PHP, .net, etc que son más simples en cuanto a tu proposito.

De todas formas, si en verdad deseas hacerlo con un applet, debes hacer el programa, crear el archivo jar y luego validarlo.

Una pequeña muestra de una parte del programa para manejar archivos usando serializacion de datos es esta:

/**
* Envía el fichero indicado a través del ObjectOutputStream indicado.
* @param fichero Nombre de fichero
* @param oos ObjectOutputStream por el que enviar el fichero
*/
private void enviaFichero(String fichero )
{
try
{
boolean enviadoUltimo=false;

// Se abre el fichero.
FileInputStream fis = new FileInputStream(fichero);

// Se instancia y rellena un mensaje de envio de fichero
MensajeTomaFichero mensaje = new MensajeTomaFichero();
mensaje.nombreFichero = fichero;

// Se leen los primeros bytes del fichero en un campo del mensaje
int leidos = fis.read(mensaje.contenidoFichero);

// Bucle mientras se vayan leyendo datos del fichero
while (leidos > -1)
{
// Se rellena el número de bytes leidos
mensaje.bytesValidos = leidos;

// Si no se han leido el máximo de bytes, es porque el fichero
// se ha acabado y este es el último mensaje
if (leidos < MensajeTomaFichero.LONGITUD_MAXIMA)
{
mensaje.ultimoMensaje = true;
enviadoUltimo=true;
}
else
mensaje.ultimoMensaje = false;

// Se envía por el socket
salida.writeObject(mensaje);

// Si es el último mensaje, salimos del bucle.
if (mensaje.ultimoMensaje)
break;

// Se crea un nuevo mensaje
mensaje = new MensajeTomaFichero();
mensaje.nombreFichero = fichero;

// y se leen sus bytes.
leidos = fis.read(mensaje.contenidoFichero);
}

if (enviadoUltimo==false)
{
mensaje.ultimoMensaje=true;
mensaje.bytesValidos=0;
salida.writeObject(mensaje);
}
} catch (Exception e)
{
e.printStackTrace();
}
}

class MensajeTomaFichero implements Serializable
{
/** Nombre del fichero que se transmite. Por defecto "" */
public String nombreFichero="";

/** Si este es el último mensaje del fichero en cuestión o hay más después */
public boolean ultimoMensaje=true;

/** Cuantos bytes son válidos en el array de bytes */
public int bytesValidos=0;

/** Array con bytes leidos del fichero */
public byte[] contenidoFichero = new byte[LONGITUD_MAXIMA];

/** Número máximo de bytes que se enviaán en cada mensaje */
public final static int LONGITUD_MAXIMA=10;
}






claro que tienes que pensar también en el servidor, el cual debe contar con la estructura de esta ultima clase.

Por último, para que tus clientes se conecten, puedes usar la tecnologia de sockets que incluye java. En internet hay muchisimos ejemplos simples.

Espero que te haya sido util