Home| New Wiki | | Login | User registry | Home Tree PDF
Temporal Web
Owner:csilva, Version: 6, Date:Sun 05, February 2006,

Carpeta temporal web

Esta es una aplicacion J2EE (módulo WAR), que permite subir archivos a un area temporal donde permanecen por una cantidad de tiempo definida. Los archivos subidos se borran automaticamente o pueden ser borrados manualmente por cualquier usuario. Esta es básicamente un area libre para compartir archivos (como la carpeta /tmp de linux).

Esta programado con 1 servlet y 3 jsp usando Beans y programacion mvc, sin ninguna "cosa rara" salvo threads apra el borrado automatico...

Se incluyen las clases para IO y manejo de formularios con enconding form/mime-multipart :)

Download

Los fuentes son con Licencia ASF 2.0, y pueden bajarlos desde aqui webtemp.zip.

El archivo .jar solo incluye los fuentes. Debe generarse un archivo war valido a partir de esta base.

Ejemplo: Este WAR esta funcionando en este sitio: Sitio demo!.

Código

Se utiliza solo 1 servlet para todas las operaciones, separando GET (listar y obtener) y POST (subir archivo):

Listado 1: WebTemp.java::doGet(...)

   protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException,
           IOException {
       flog("doGet...");
       
       List list = (List) getServletContext().getAttribute("list");
       List log = (List) getServletContext().getAttribute("log");
       Date now = new Date();
       String ip = req.getRemoteAddr();

       if (req.getParameter("download") != null) {
           flog("Downloading...");
           int elem = Integer.parseInt(req.getParameter("download"));
           TempFile file = (TempFile) list.get(elem);
           Part part = file.getPart();
           res.setContentType("application/download");
           res.setHeader("content-disposition", "attachment; fileName="" + file.getName() + """);
           new StreamPipe(new FileInputStream(part.getFile()), res.getOutputStream()).run();

           TempLog item = new TempLog(now, ip, "download", file.getName());
           log.add(item);
           return;
       } else if (req.getParameter("remove") != null) {
           flog("Removing...");
           int elem = Integer.parseInt(req.getParameter("remove"));

           TempFile file = (TempFile) list.get(elem);
           list.remove(elem);
           file.getPart().getFile().delete();

           TempLog item = new TempLog(now, ip, "remove", file.getName());

           log.add(item);
       }
       flog("Listing...");
       forward("list", req, res);
   }

Listado 2: WebTemp.java::doPost(...)

   protected void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException,
           IOException {
       flog("doPost...");
       if (MultipartHandler.checkContentType(req.getContentType())) {
           List list = (List) getServletContext().getAttribute("list");
           List log = (List) getServletContext().getAttribute("log");

           flog("Uploading...");
           MultipartHandler handler = new MultipartHandler();
           handler.tmpDir = new File(tmpPath);
           handler.prefix = "webtemp_";
           handler.handle(req.getInputStream());

           com.csa.lib.mime.Part part = handler.get("file");
           String comments = handler.getParameter("comments");
           Date now = new Date();
           String ip = req.getRemoteAddr();

           TempFile file = new TempFile(part.getFileName(), part.getLength(), now, ip, comments,
                   part);
           TempLog item = new TempLog(now, ip, "upload", part.getFileName());

           list.add(file);
           log.add(item);
           
           // Limpiar logs antiguos            
           for (int i = 0; i < log.size(); i++) {
               TempLog elem = (TempLog) log.get(i);
               long diff = now.getTime() - elem.getDate().getTime();
               diff = diff / (60*60*1000); // en horas
               if ( diff> (7*24) ) // mas de una semana 
                   log.remove(i);
               i--;
           }

           flog("Added to list (and log)...");
           new Eraser(list, log, file, minutosTimeout * 60 * 1000).start();

       }
       flog("Listing...");
       forward("list", req, res);
   }


History - Extract PDF - Extract Tree as PDF

Last Modified

Thu, Nov 19 Sat, Oct 3 Fri, Sep 25 Mon, Aug 3 Mon, Apr 27 Sat, Mar 28 Mon, Jan 19 Tue, Jan 6

Home| New Wiki