Estoy cargando un archivo CSV a un servlet Java. Mi formulario HTML se ve así:

<form action="upload" method="post" enctype="multipart/form-data">
<input type="file" name="file" id="file">
<input type="submit" name="submitBt" id="submitBt">
</form>

En mi servlet, hago lo siguiente para recuperar el archivo:

public void uploadCsv(HttpServletRequest request) {
request.getPart("file")
...
}

Cuando se establece un archivo, el servlet hace su trabajo y todo está bien.

Mi problema es que tengo una segunda forma en el mismo JSP. Entonces, cuando se envía un formulario, quiero probar si la entrada denominada "archivo" que contiene el archivo CSV está configurada o no.

Intenté lo siguiente:

if (req.getParameter("file") != null)

Siempre falsa

if (request.getParameterMap().containsKey("file"))

Siempre falsa también

if (req.getPart("file") != null)

Lanza una excepción si el archivo no está configurado

¡Ayuda! RE:

0
Jmapelleteuse 15 ene. 2018 a las 02:05

3 respuestas

La mejor respuesta

Una forma (sucia) de verificar si una Parte está configurada, ya que req.getPart ("archivo") arroja una excepción:

boolean isSet = false;
try {
    req.getPart("file");
    isSet = true;
} catch(Exception e) { 
    isSet = false; 
}

if (isSet) {
    // Do your work
}
0
Jmapelleteuse 15 ene. 2018 a las 14:36

Debe anotar su servlet con @MultipartConfig para permitirle reconocer y admitir las solicitudes de multipart/form-data y así lograr que getPart() funcione

Enviar un campo vacío no es lo mismo que no enviar un campo.

  • Si un campo no se completa pero se envía, terminan como cadenas vacías
  • Si no se envía un campo, entonces es nulo

Para que pueda verificar si el valor no es solo una cadena vacía

String file = request.getParameter("file");

if (file != null && !file.isEmpty()) {
    // It's submitted and filled
}

Puede usar el atributo accept especifica los tipos de archivos que acepta el servidor (que pueden enviarse mediante la carga de un archivo).

<input type="file" accept=".csv" />

Nota:

  • El atributo accept solo se puede usar con <input type="file">
  • No utilice este atributo como herramienta de validación. La carga de archivos debe validarse en el servidor.

ACTUALIZACIÓN

Puede hacer que el campo de carga de archivos sea obligatorio mediante la validación de JavaScript

function validate(){
    var inputField = document.getElementById('upload');
    if(inp.files.length == 0){
        alert("Attachment Required");
        inputField.focus();
        return false;
    }
}
<form enctype="multipart/form-data" method="post" onsubmit="return(validate());">
    <input name="file[]" type="file" multiple="multiple" id="upload">
    <input type="submit" value="Submit"/>
</form>

Eche un vistazo a esta respuesta Cómo cargar archivos al servidor usando JSP / Servlet?

-1
rimonmostafiz 15 ene. 2018 a las 09:32

Las partes de los formularios se envían como un archivo al servidor, por lo que puede hacer esto ...

boolean isthereafile;
if(request.getPart("file").getSize()>0){
isthereafile = true;
}
if(request.getPart("file").getSize()<=0){
isthereafile = false;
}
0
Ignem2 14 oct. 2019 a las 04:57