Buenos días comunidad.
El problema es que, al seleccionar un archivo con extensión MDB (de 150Mb), el navegador hace el intento de subir el archivo, pero éste reinicia la conexión con el servidor y en consecuencia no se puede completar la tarea.
Estoy usando Apache Tomcat 8.0 y NetBeans 8.0.2 para el desarrollo de este módudo.
ésta es la página principal:
<form action="AltaArchivo" method="post" enctype="multipart/form-data">
<p>
<center><input type="File" name="archivo" id="btnFile" title="Seleccione un archivo para comenzar"></center>
</p><strong><center><div id="salida" style="color:red"></div></center></strong>
<!--BARRA DE PROGRESO-->
<p><center><progress id="barra" value="0" max="100"></progress></center></p>
<!--BARRA DE PROGRESO-->
<p> <br >
</p>
<p> </p><p> </p><p> </p>
<p>Una vez que el archivo haya sido seleccionado, por favor, pulse el botón aceptar para que se dé inicio con el proceso de importación.</p>
<p> </p>
<center><input type="button" name="Submit" id="btnSubmit" value="Aceptar" title="Pulse Aceptar cuando haya seleccionado un archivo" onclick="comprueba_extension(this.form, this.form.archivo.value)"></center>
</form>
Y éste es el Servlet que estoy usando para realizar la subida al Servidor.
package Contenedor;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
import java.util.Date;
import java.util.LinkedList;
import java.util.Iterator;
@WebServlet("/AltaArchivo")//Nombre del Servlet
@MultipartConfig(fileSizeThreshold=1024*1024*50, // 50 MB /*Tamaños máximos de entrada,y config de Multipart Form*/
maxFileSize=1024*1024*100, // 100 MB
maxRequestSize=1024*1024*300) // 300 MB
public class AltaArchivo extends HttpServlet {
/********************VARIABLES A USAR*****************************/
private static final long serialVersionUID = 205242440643911308L;
private static final String UPLOAD_DIR = "uploads";
XSSFRow masterrow;
XSSFCell mastercell;
LinkedList<Object>lista=new LinkedList<Object>();//Clase LinkedList para quitar Array y manejar datoss
@Override
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
PrintWriter out=response.getWriter();
/*Primero almaceno en ua variable la ruta Absoluta del proyecto(Path)*/
String applicationPath = request.getServletContext().getRealPath("");
String uploadFilePath=applicationPath+"\\RepositorioArchivo";//Hago una variable que cree un repositorio en la ruta(Path)
File fileSaveDir = new File(uploadFilePath);//Creamos un objeto de tipo File que define el path de subida de archivos
if (!fileSaveDir.exists()) {//En caso de no existir
fileSaveDir.mkdirs();//Se crea con el método mkDirs()
}
String fileName = null;//Esta variable recupera el nombre del archivo seleccionado
for (Part part : request.getParts()) {//Se hace una iteración con un objeto de tipo Part que recupera cada fragmento del archivo seleccionado
fileName = getFileName(part);//Para hacer el nombrado del archivo, se usa el Método getFileName(part)
part.write(uploadFilePath + File.separator + fileName);//Se reintegran los fragmentos del archivo con el nombre
}
}
private String getFileName(Part part) {//éste método permite recupera el nombre origial del archivo seleccionado en el formulario
String contentDisp = part.getHeader("content-disposition");
System.out.println("content-disposition header= "+contentDisp);
String[] tokens = contentDisp.split(";");
for (String token : tokens) {
if (token.trim().startsWith("filename")) {
return token.substring(token.indexOf("=") + 2, token.length()-1);
}
}
return "";
}
¿Es posible que se deba a que el archivo a subir es demasiado pesado para el servidor?
¿Existe otra forma de subir archivos pesados sin que el Servidor se reinicie?
De antemano muchas gracias.