viernes, junio 27, 2008

[Java] File Upload servlet


Aqui les dejo una version actualizada del código para java servlet de "file upload".
Colocaré los pasos exactos que yo segui para que el ejemplo funcione.



 ____________________________________________________________________________
En principio, utilice Netbeans 6 y tomcat 6 para este ejemplo.

1. Obterner la librería "Commons IO" (ver 1.4) de :

http://commons.apache.org/io/

2. Obtener la librería "commons file upload" (en este caso bajé la ver 1.2.1 de enero del 2008).

http://commons.apache.org/fileupload/

3. Ambas descomprimirlas en una carpeta "c:/librerias"

4. Crear un proyecto nuevo llamado "FileUpload"
Notar que se selecciono "Tomcat 6" como application server.


5. Crear un html nuevo llamado "uploadFile"



Colocar en el nuevo html el siguiente código:




<HTML>


<HEAD>


<TITLE></TITLE>


</HEAD>


<BODY>


<center>


<form method="POST" enctype='multipart/form-data'


action="/FileUpload/UploadFichero">


Seleccione el archivo a enviar al servidor<br>


<input type="file"


name="fichero">


<input type="submit" value="Upload">


</form>


</center>


</BODY>


</HTML>



6. Agregar las librerias que se descomprimieron en el archivo "c:/librerias"


Se agregarán todas las librerias "commons file upload"

y se agregaran todas las librerias "commons IO"

Todas las librerias deberían verse así en el entorno:

7. Se crea un nuevo paquete, llamado org.txos

8. Se crea un nuevo servlet llamado "UploadFichero"

9. Colocar el siguiente código en el servlet:





/*


* UploadFichero.java


*


* Created on 27-06-2008, 11:22:00 AM


*


* To change this template, choose Tools | Templates


* and open the template in the editor.


*/
package org.txos;


import java.io.*;


import java.net.*;


import javax.servlet.*;


import javax.servlet.http.*;


import org.apache.commons.fileupload.*;


import org.apache.commons.fileupload.disk.DiskFileItemFactory;


import org.apache.commons.fileupload.servlet.ServletFileUpload;


import java.util.*;


/**


*


* @author Os


*/


public class UploadFichero extends HttpServlet {


/**


* Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.


* @param request servlet request


* @param response servlet response


*/


protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {


boolean ok = getNSaveFile(request);


response.setContentType("text/html");


PrintWriter out = response.getWriter();


out.println("");


out.println("");


out.println("");


out.println("");


out.println("");


if (ok) {


out.println("La transferencia del archivo fue exitosa.");


} else {


out.println("Fallo en transferencia de archivo.");


}


out.println("");


out.println("");


out.close();


}


public boolean getNSaveFile(HttpServletRequest request) {


try {


// Chequea que sea un request multipart (que se este enviando un file)


boolean isMultipart = ServletFileUpload.isMultipartContent(request);


System.out.println("Is multipart=" + isMultipart);


DiskFileItemFactory factory = new DiskFileItemFactory();


// maxima talla que sera guardada en memoria


factory.setSizeThreshold(4096);


// si se excede de la anterior talla, se ira guardando temporalmente, en la sgte direccion


factory.setRepository(new File("d:/"));


ServletFileUpload upload = new ServletFileUpload(factory);


//maxima talla permisible (si se excede salta al catch)


upload.setSizeMax(10000000);


List fileItems = upload.parseRequest(request);


//obtiene el file enviado


Iterator i = fileItems.iterator();


FileItem fi = (FileItem) i.next();


//graba el file enviado en el servidor local


//path y Nombre del archivo destino (en el server)


String path = "c:/";


String fileName = "nuevo.txt";


fi.write(new File(path, fileName));


} catch (Exception e) {


System.out.println(e.getMessage());


e.printStackTrace();


return false;


}


return true;


}


@Override


protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {


processRequest(request, response);


}


/*


* Handles the HTTP POST method.


* @param request servlet request


* @param response servlet response


*/


}

10. Hacer "Build" al código del proyecto

11. Correrlo....
12. Se mostrará inicialmente el jsp.index, cambiar el path en el browser a:

13. Se deberá ver una página de este estilo:

14. Buscar un archivo cualquiera, preferentemente .txt y subirlo... se verá la siguiente página:

15. Buscar el archivo "subido" en c:/nuevo.txt.

16. Fin.



xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

jueves, febrero 08, 2007

Acceso como root FTP y TELNET solaris 10

Acceso como root FTP y TELNET solaris 10 (Solucionado)


Acceso como root FTP y TELNET solaris 10 (Solucionado)

Para acceder como root a solaris 10, tanto para telnet como para ftp se
deberan reconfigurar los siguientes archivos:

Telnet:
/etc/default/login, cambiar:
CONSOLE=/dev/console por #CONSOLE=/dev/console

FTP:
/etc/ftpd/ftpusers , cambiar:
root , por #root

martes, enero 16, 2007

[Java] Lee archivo con getResource

Este ejemplo muestra como leer un archivo de texto utilizando "getResource()".

Para aquellos que ya utilizaron getResource y se chocaron con el problema que al mostrar el path les salia algo como esto:
/c:/program%20files/...
La idea que hay que tomar en cuenta es que las direcciones "URL" no contienen espacios, por lo tanto son reeplazadas por el caracter "%20", para ello se repara el path utilizando replaceAll("%20"," ").


Nota: El ejemplo aqui mostrado lee el archivo "getTextResource.java" y lo muestra.

Espero y les sea de utilidad.




____________________________________________________________________________

import java.io.*;
import java.net.*;

/*
*
*@author Oscar Hurtado Morato
*
*/
public class getTextResource {
public getTextResource() {
}
public static void main(String[] arg) {
try{
getTextResource ex=new getTextResource();
ex.leeArchivo();
}
catch(Exception e){
e.printStackTrace();
}
}
public void leeArchivo()throws IOException {
URL url=this.getClass().getResource("getTextResource.java");
String path=url.getPath();
path=path.replaceAll("%20"," ");
System.out.println(path);
//lee el file
BufferedReader br = new BufferedReader(new FileReader(path));
String thisLine="";
String retDoc="";
while ((thisLine = br.readLine()) != null) {
retDoc=retDoc+thisLine+"\n";
}
System.out.println(retDoc);
}
}

viernes, enero 12, 2007

[Java] File Download Servlet

Aqui les va el codigo para hacer "Dowload" de un fichero que se encuentre en el servidor, hacia el cliente.
Espero y les sirva.


----------------------------------------------------------------------------------------
1. Crear una pagina html con el nombre de "download.html", en el siguiente directorio
../webapps/nombre proyecto/jsp/ejemplos
Ojo: nombre proyecto se refiere al nombre que "Usted" le puso a su proyecto (que se encuentra en el directorio "webapps").Si por ejemplo este se llamase "prueba1", entonces el path seria como sigue:...webapps\prueba1\jsp\ejemplos
Que contenga el siguiente codigo:




<%@page contentType="text/html"%>
<html>
<head><title>jspQuery</title></head>
<body>
<form action="/nombre proyecto/servlet/ejemplos.Download">
<p><font color="#FFFFFF" size="1"
face="Verdana, Arial, Helvetica, sans-serif"><strong>
</strong></font></p>
<p>
<input type="submit" value="Download" name="dato"
>
</p>
<p> </p>
<p> </p>
</form>
</body>
</html>






2. Crear un fichero bajo el nombre de: "Download.java" en la siguiente direccion:
\webapps\nombre proyecto\WEB-INF\classes\ejemplos
Conteniendo el siguiente codigo:




/*
* Download.java
*
* Created on Jan 12, 2006, 04:00 PM
*/
package ejemplos;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
/**
*
* @author Oscar Hurtado Morato
* @version 1.0
*/
public class DownloadError extends HttpServlet {
/** Initializes the servlet.
*/
public void init(ServletConfig config) throws ServletException {
super.init(config);
}
/** Destroys the servlet.
*/
public void destroy() {
}
protected void processRequest(HttpServletRequest request, HttpServletResponse
response)
throws ServletException, java.io.IOException {
//Aqui se colocan el path y el nombre del file a hacerse upload
String filePath = "c:/";
String fileName = "prueba.txt";
FileInputStream fileToDownload = new FileInputStream(filePath);
ServletOutputStream out = response.getOutputStream();
response.setContentType("application/zip");
response.setHeader("Content-Disposition","attachment; filename="+fileName);
response.setContentLength(fileToDownload.available());
int c;
while((c=fileToDownload.read()) != -1){
out.write(c);
}
out.flush();
out.close();
fileToDownload.close();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, java.io.IOException {
processRequest(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse
response)
throws ServletException, java.io.IOException {
processRequest(request, response);
}
}




3. Fin.

viernes, octubre 21, 2005

[Java] getResource ejemplo.

Este es un claro ejemplo de como utilizar la funcion getResource().
El programa retorna la direccion en donde "getClassPathInfo.class" se encuentra.



//-------------------------------------------- 
public class getClassPathInfo {
public getClassPathInfo() {
}
public static void main(String[] arg) {
System.out.println("File: " + getClassPathInfo.class.getResource("getClassPathInfo.class").getFile());
System.out.println("URL: " + getClassPathInfo.class.getResource("getClassPathInfo.class"));
System.out.println("Path: " + getClassPathInfo.class.getResource("getClassPathInfo.class").getPath());
}
}
//--------------------------------------------

jueves, julio 28, 2005

jueves, julio 14, 2005

[Java] Parsea fecha string "dd-mm-aaaa" y la convierte en 3 enteros.

Este programa se explica solo..

public parseaFechaConvierteEnInt(String fecha){
//parsea la fecha introducida..ej 1-2-2000
int indx=fecha.indexOf("-",0);// indx=1
String dS=fecha.substring(0,indx);// d="1"
int indx2=fecha.indexOf("-",indx+1);//indx2=3
String mS=fecha.substring(indx+1,indx2);//m="2"
int len=fecha.length();//len=8
String aS=fecha.substring(indx2+1,len);//a="2002"
//convierte de Strings a enteros
int d=Integer.valueOf(dS).intValue();
int m=Integer.valueOf(mS).intValue();
int a=Integer.valueOf(aS).intValue();
}

miércoles, julio 13, 2005

[Java] Diferencia de dias entre dos fechas

Esta funcion calcula la diferencia de dias entre dos fechas.
Si se toma como ejemplo de fecha inicial el 1 de enero del 2000 y como fecha final el 10 de enero del 2000, el resultado que retornara la funcion sera igual a '9'.

____________________________________________________________________________


public long difDiasEntre2fechas(int Y1,int M1,int D1,int Y2,int M2,int D2){
java.util.GregorianCalendar date=new java.util.GregorianCalendar(Y1,M1,D1);
java.util.GregorianCalendar date2=new java.util.GregorianCalendar(Y2,M2,D2);
long difms=date2.getTimeInMillis() - date1.getTimeInMillis();
long difd=difms / (1000 * 60 * 60 * 24);
return difd;
}

java.net.SocketException: Software caused connection abort: socket write error

JAVA : Utilizando la librería " org.apache.commons.net.ftp ", encontré que al listar los archivos del servidor FTP se generaba...