|
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);
}
|