entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

2votos

Subir archivo a un servidor con información del mismo en jsp

Buenos dias estoy subiendo un archivo a un servidor, e incluso varios campos en un solo formulario el cual al enviarlo me envia un erro de conversión en un int.. Dejo mi codigo...

mi servlet

@Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        CategoriasDaoImplementacion DaoCategoria = new CategoriasDaoImplementacion();

        beanDocumento documento = new beanDocumento();

        documento.setNdocumento(request.getParameter("txtNombreDoc"));
        documento.setComentario(request.getParameter("txtComentario"));
        documento.setAutordoc(request.getParameter("txtAutorN"));
        documento.setResponsable(request.getParameter("txtResponsable"));

        int categoria = Integer.parseInt(request.getParameter("txtCat"));
        documento.setIdCategoria(categoria);

        beanCategoria bCategoria = DaoCategoria.obtenerCategoria(categoria);
        documento.setFechaC(request.getParameter("txtfechaV"));
        documento.setRuta(bCategoria.getRuta()+"/");

        boolean isMultipart = ServletFileUpload.isMultipartContent(request);

        if(isMultipart){
            FileItemFactory factory = new DiskFileItemFactory();

            ServletFileUpload upload = new ServletFileUpload(factory);

            try {

                List<FileItem> multiparts = upload.parseRequest(request);

                for(FileItem item : multiparts){
                    if(!item.isFormField()){
                        String name = new File(item.getName()).getName();
                        item.write(new File (documento.getRuta() + File.separator + name));
                    }
                }
            } catch (Exception e) {
            }
        }

        System.out.println(documento);
    }

aun no le dado el guardado de los datos a la base de datos

mi formulario

<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@page language="java" contentType="text/html" pageEncoding="UTF-8"%>
<%@page import="java.util.List" %>
<%@page import="com.ccs.clases.beanUsuario" %>
<%@page import="com.ccs.dao.UsuarioDaoImplementacion" %>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Registro de Documento</title>
        <script src="assets/js/pages-calendar.js"></script>
    </head>
    <body>
        <form method="post" action="ControlRegistroDocumento" enctype="multipart/form-data">
            <table>
                <tr>
                    <td><label>Documento</label></td>
                    <td><input type="file" name="file"></td>
                </tr>
                <tr>
                    <td><label>Nombre de Documento</label></td>
                    <td><input type="text" name="txtNombreDoc" ></td>
                </tr>
                <tr>
                    <td><label>Comentario</label></td>
                    <td><textarea type="text" name="txtComentario" cols="50" rows="8">

1voto

Leonardo-Tadei comentado

En qué línea se produce el error?

0voto

Alex_Numpaque comentado

@Leonardo-Tadei int categoria = Integer.parseInt(request.getParameter("txtCat"));
documento.setIdCategoria(categoria); error de conversion
Genera un error 500, e incluso intente agregarle a enctype del formulario "text/plane"

3 Respuestas

1voto

Alex_Numpaque Puntos17150

Buenas noches ya encontré una solución observe que el entype = "multipart/ form-data" no permitía enviar los valores ya que los imprimí en la consola y todos eran nulo asi que separe los formularios el primero solicita que se ingrese los datos y envia la ruta de alojamiento y permite subir un archivo.. no es muy practico pero es funcional

0voto

Alex_Numpaque comentado

Mi formulario <%--
Document : ingresoDocumento
Created on : 13/04/2016, 11:58:05 AM
Author : serverdocumentacion
--%>

<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@page language="java" contentType="text/html" pageEncoding="UTF-8"%>
<%@page import="java.util.List" %>
<%@page import="com.ccs.clases.beanUsuario" %>
<%@page import="com.ccs.dao.UsuarioDaoImplementacion" %>
<%@page import="java.util.*" session="true" %>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Registro de Documento</title>
<script src="assets/plugins/jQuery/jquery-2.1.1.min.js"></script>
</head>
<body>
<% String ruta = request.getParameter("ruta");
System.out.println(ruta);
%>
<form method="post" action="ControlRegistroDocumento" name="frmDocumento" id="frmDocumento" >
<table>
<tr>
<td><label>Nombre de Documento</label></td>
<td><input type="text" name="txtNombreDoc" /></td>
</tr>
<tr>
<td><label>Comentario</label></td>
<td><textarea type="text" name="txtComentario" cols="50" rows="8"></textarea></td>
</tr>
<tr>
<td><label>Autor</label></td>
<td>
<select name="cmbAutor" onchange="this.form['txtAutorN'].value = this.value">
<option>Seleccione un Autor</option>
<c:forEach var="usuario" items="${usuarios}">
<option name="cmbAutor" value="<c:out value="${usuario.nombres} ${usuario.apellidos}"/>" id="<c:out value="${usuario.idUsuario}" />"><c:out value="${usuario.nombres} ${usuario.apellidos}"/></option>
</c:forEach>
</select>
</td>
</tr>
<tr>
<td>
<input type="hidden" name="txtAutorN"/>
</td>
</tr>
<tr>
<td><label>Responsable</label></td>
<td>
<select name="cmbResponsable" onchange="this.form['txtResponsable'].value = this.value">
<option>Seleccione un Responsable</option>
<c:forEach var="usuario" items="${usuarios}">
<option name="cmbResponsable" value="<c:out value="${usuario.nombres} ${usuario.apellidos}"/>" id="<c:out value="${usuario.idUsuario}" />"><c:out value="${usuario.nombres} ${usuario.apellidos}"/></option>
</c:forEach>
</select>
</td>
</tr>
<tr>
<td><input type="hidden" name="txtResponsable"/></td>
</tr>
<tr>
<td><label>Fecha de Creación</label></td>
<td><input type="date" name="txtFecha" onchange="this.form['txtfechaV'].value = this.value"></td>
</tr>
<tr>
<td><input type="hidden" name="txtfechaV"/></td>
</tr>
<tr>
<td><label>Categoria</label></td>
<td>
<select name="cmbCategoria" onchange="this.form['txtCat'].value = this.value">
<option value="0">Seleccione una categoria</option>
<c:forEach items="${categorias}" var="categoria">
<option name="cmbcategorias" id="<c:out value="${categoria.idcategoria}"/>" value="<c:out value="${categoria.idcategoria}"/>"><c:out value="${categoria.ncategoria}"/></option>
</c:forEach>
</select>
</td>
</tr>
<tr>
<td>
<input type="hidden" name="txtCat"/>
</td>
</tr>
<tr>
<td><input type="submit" name="btnIngreso" value="Ingresar" /></td>
</tr>
</table>
</form>
</body>
</html>

mi segundo form
<%--
Document : subirArchivos
Created on : 24-abr-2016, 19:11:47
Author : serverdocumentacion
--%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@page import="java.io.File"%>
<%@page import="org.apache.commons.fileupload.FileItem"%>
<%@page import="org.apache.commons.fileupload.FileItemFactory"%>
<%@page import="java.util.List"%>
<%@page import="org.apache.commons.fileupload.disk.DiskFileItemFactory"%>
<%@page import="org.apache.commons.fileupload.servlet.ServletFileUpload"%>
<%@page import="com.ccs.clases.beanDocumento" %>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Subir Archivo</title>
<%
String ruta = request.getParameter("ruta");
System.out.println("ruta " + ruta);
session.setAttribute("local", ruta);
%>
</head>
<body>
<form action="agregar.jsp" method="post" enctype="multipart/form-data">

        <table>
            <tr>
                <td><label>Documento</label></td>
                <td><input type="file" name="file"/></td>
            </tr>
            <tr>
                <td> <input type="submit" value="subir"></td>
            </tr>
        </table>
    </form>
</body>

</html>
y la jsp para subir archivos
<%--
Document : agregar
Created on : 25-abr-2016, 9:21:05
Author : serverdocumentacion
--%>

<%@page import="java.util.Iterator"%>
<%@page import="java.io.File"%>
<%@page import="org.apache.commons.fileupload.FileItem"%>
<%@page import="java.util.List"%>
<%@page import="org.apache.commons.fileupload.FileItemFactory"%>
<%@page import="org.apache.commons.fileupload.disk.DiskFileItemFactory"%>
<%@page import="org.apache.commons.fileupload.servlet.ServletFileUpload"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<%

        String ubi = (String) session.getAttribute("local");
        System.out.println("ubi " + ubi);

        if(ServletFileUpload.isMultipartContent(request)){
            try{
                List<FileItem> multiparts = new ServletFileUpload(new DiskFileItemFactory()).parseRequest(request);
                for(FileItem item : multiparts){
                    if(!item.isFormField()){
                        String name = new File(item.getName()).getName();
                        item.write(new File(ubi + File.separator + name));

                    }
                }
            }catch(Exception e){

            }
        }
    %>
</body>

</html>

0voto

Alex_Numpaque Puntos17150

Ya hice la prueba si en uso de enctype para enviar los datos y los envia pero al agragarselo para que me tome la ruta del archivo me gernera un error en el que la variable enviada para que tome la ruta la cual es un int , envia error 500 java.lang.NumberFormatException: null, por favor es urgente esta es la ultima parte que me hace falta para terminar una app de gestion documental.. gracias

2votos

Leonardo-Tadei Puntos227320

Hola @Jhon_Numpaque,

lo más probable es que lo que está pasando es que el atributo idCategoria al que le estás asignando el Int sea de otro tipo.

Revisá el setter y el tipo de variable del atributo para ver si es un Int, ya que si es algún otro tipo entero como short o long, te va a dar ese error de conversión.

Java tiene métodos específicos para convertir strings a cada uno de los tipos de entero que maneja...

Saludos cordiales

0voto

Alex_Numpaque comentado

hola @Leonardo-Tadei ya revise los setter del campo y las variables que envio son int, y al verificar el envio del request me sale null

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta