Foros del Web » Programación para mayores de 30 ;) » Java »

subir archivos grandes con fileupload

Estas en el tema de subir archivos grandes con fileupload en el foro de Java en Foros del Web. Nuevamente se me presento un problema. el problema es el siguiente: Estoy utilizando la libreria fileupload para subir archivos al servidor, funciona todo perfecto hasta ...
  #1 (permalink)  
Antiguo 11/01/2009, 09:19
rls
 
Fecha de Ingreso: marzo-2008
Mensajes: 48
Antigüedad: 16 años, 1 mes
Puntos: 0
subir archivos grandes con fileupload

Nuevamente se me presento un problema. el problema es el siguiente:

Estoy utilizando la libreria fileupload para subir archivos al servidor, funciona todo perfecto hasta con archivos de 4MB, pero cuando trato de subir archivos de un tamaño superior por decir de 11MB ya no funciona. El problema se debe a que como se realiza la peticion al servlet donde se lleva a cabo el proceso para subir el archivo, tarda mucho en responder por ese motivo se reinicia la conexion al servidor.
para evitar que se tengo que seguir operando en el sistema (entonces se siguen realizando peticiones al servidor y no se cierra la conexion, y los archivos grandes si se suben correctamente).

En resumen la libreria fileupload si funciona bien para archivos grandes pero mientras siga operando en el sistema. Lo que yo quiero es poder dejar subiendo el archivo, mientras yo me pueda ir a dormir.

Como puedo solucionar ese problemita. Hay algun archivo de configuracion del tomcat donde yo pueda configurar para que nose reinicie la conexion. Pero otra solucion que yo estaba pensando es realizar peticiones al servidor en forma automatica paralelamente mientras sube el archivo. Pero no se como hacerlo.

Les dejo el codigo donde realizo el proceso para subir el archivo. El metodo donde se realiza el proceso subida del archivo es procesaFicheros(HttpServletRequest req,HttpServletResponse res), los demas metodos son complemetarios donde se guarda datos a la base de datos otras cosas mas.

Código:
package util.file;
import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpSession;
import javax.servlet.Servlet;

import java.io.*;
import java.net.*;
import javax.servlet.*;
import javax.servlet.http.*;
import org.apache.commons.fileupload.*;
import java.util.*;

import util.Consultas;
import util.dbconector;
import util.calendar.Calendario;
import util.image.ImageEditor;

/**
 * Servlet implementation class for Servlet: FileManager
 *
 */
 public class FileManager extends HttpServlet{
	 dbconector db;	
	 String cp="";
	 String mensaje="";
	protected void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {

			boolean b=subirArchivo(req,res);
			if(b){
			res.getWriter().print("<center><h2 style='color:blue'>Archivo Subido Exitosamente</h2></center>");
			}else{
				res.getWriter().print("<center><h2 style='color:blue'>"+mensaje+"</h2></center>");
			}
	}
	
	protected boolean subirArchivo(HttpServletRequest req,HttpServletResponse res){
		if(procesaFicheros(req,res))return true;
		return false;
	}	

	public boolean procesaFicheros(HttpServletRequest req,HttpServletResponse res) {
		try {
			
			String desc="";
			String carpet="";
			String dir="";
			File fichero=null;
			// construimos el objeto que es capaz de parsear la perici�n
			DiskFileUpload fu = new DiskFileUpload();
			// maximo numero de bytes	
			fu.setSizeMax(1024*1024*1024);			
			// tamaño por encima del cual los ficheros son escritos directamente en disco
			fu.setSizeThreshold(4096);
			// directorio en el que se escribirïán los ficheros con tamaño superior al soportado en memoria
			fu.setRepositoryPath("C:/temp");			
			//ordenamos procesar los ficheros
			List fileItems = fu.parseRequest(req);
			if(fileItems == null)return false;
			// Iteramos por cada fichero
			Iterator i = fileItems.iterator();
			FileItem actual = null;			
			int ctd=0;
			while (i.hasNext())
			{ctd++;				 
			actual = (FileItem)i.next();
			if ( ! actual.isFormField() )//verificamos si es archivo
			{	
			String fileName = actual.getName();
			if(existe(fileName, carpet))return false;
			System.out.println(actual.getName());
			File destino=new File("D:/Ficheros/"+dir+"/");
			if(!destino.exists()){
				mensaje="El destino no existe o ha sido removido";
				return false;				
			}
			fichero = new File(fileName);			
			fichero = new File("D:/Ficheros/"+dir+"/"+ fichero.getName());
			actual.write(fichero);			
			}
			else{
			System.out.println(actual.getString()+" nro="+ctd);
			if(ctd==1){carpet=actual.getString();cp=carpet;}
			else if(ctd==2)desc=actual.getString();
			else if(ctd==3)dir=actual.getString();
			}
			}
			adicionarFile(req,fichero,desc,carpet,dir);
			}
		
			catch(Exception e) {
			e.printStackTrace();
			return false;
			}
			return true;
			}
		public void adicionarFile(HttpServletRequest req,File file,String desc,String carpet,String dir){
			int tam=((int)file.length())/1024;
			String fecha=Calendario.getFecha()+" "+Calendario.getHora();
			String nombre = file.getName();
			String ext = file.getName().substring(file.getName().lastIndexOf(".")+1);
			ext=ext.toLowerCase();
			String sql="select codta,codcon from tipo_archivo where extension='"+ext+"'";
			System.out.println(sql);
			db = new dbconector();
			Object obj[][]=db.seleccion(sql);			
			db.close();
			String tipo="17";
			int largo=db.getFilas();
			if(largo!=0)tipo=obj[0][0].toString();			
			
			db = new dbconector();					
			db.consulta(Consultas.createFile(tipo, nombre, fecha, String.valueOf(tam), carpet, "1",desc,dir));
			if(largo!=0)		
				if(obj[0][1].toString().equals("3")){				
				createThumb(nombre,dir,tipo);
			}
			
			registrar(req, fecha, "7", nombre);
		}
		protected void registrar(HttpServletRequest  req,String fecha,String acc,String nombre){
			HttpSession sesion = req.getSession(true);
			String ci = (String)sesion.getAttribute("USER_CI");
			db = new dbconector();					
			db.consulta(Consultas.regAccion(ci, nombre, fecha, acc));
		}		
		protected void createThumb(String name,String uri,String tipo){
			System.out.println("creando miniatura");
			String origen="D:/Ficheros"+uri+"/"+name;
		
			
			String destino=this.getServletContext().getRealPath("/")+"thumbs/"+name;
			if(tipo.equals("9"))ImageEditor.createGifImage(origen, destino);
			else ImageEditor.createImage(origen, destino);
		}
		protected boolean existe(String nom,String car){
			db = new dbconector();
			db.seleccion(Consultas.verificaExistencia(car, nom));
			if(db.getFilas()>0){
				mensaje="Archivo ya existe";
				return true;}
			return false;
		}
}
Agradesco de antemano su ayuda.

Última edición por rls; 11/01/2009 a las 09:28
  #2 (permalink)  
Antiguo 11/01/2009, 23:20
rls
 
Fecha de Ingreso: marzo-2008
Mensajes: 48
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: subir archivos grandes con fileupload

Por favor necesito que alguien me ayude en este pronlema. es una de las partes mas importantes del sistema que estoy desarrollando y es para presentarlo dentro de 6 horas.
  #3 (permalink)  
Antiguo 12/01/2009, 19:18
rls
 
Fecha de Ingreso: marzo-2008
Mensajes: 48
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: subir archivos grandes con fileupload

en serio que alguien me diga algo por favor es que no encuentro una solucion por ninguna parte
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:38.