type servlet receive getpart fileupload example file-upload recaptcha multipart wicket-6

file-upload - servlet - request getpart



Wicket 6-¿Captura los parámetros HttpServletRequest en forma de multiparte? (1)

Utilizando Wicket 6.17 y servlet 2.5, tengo un formulario que permite la carga de archivos, y también tiene ReCaptcha (usando Recaptcha4j). Cuando el formulario tiene ReCaptcha sin carga de archivos, funciona correctamente con el código:

final HttpServletRequest servletRequest = (HttpServletRequest ) ((WebRequest) getRequest()).getContainerRequest(); final String remoteAddress = servletRequest.getRemoteAddr(); final String challengeField = servletRequest.getParameter("recaptcha_challenge_field"); final String responseField = servletRequest.getParameter("recaptcha_response_field");

para obtener los campos de desafío y respuesta para que puedan ser validados.

Esto no funciona cuando el formulario tiene la carga del archivo porque el formulario debe ser multiparte para que la carga funcione, por lo que cuando intento obtener los parámetros de esa manera, falla.

He intentado tratar de obtener los parámetros de manera diferente con ServletFileUpload:

ServletFileUpload fileUpload = new ServletFileUpload(new DiskFileItemFactory(new FileCleaner()) ); String response = IOUtils.toString(servletRequest.getInputStream());

y

ServletFileUpload fileUpload = new ServletFileUpload(new DiskFileItemFactory(new FileCleaner()) ); List<FileItem> requests = fileUpload.parseRequest(servletRequest);

los cuales siempre regresan vacíos.

Utilizando la consola de red de Chrome, veo los valores que estoy buscando en la carga útil de solicitud, así sé que están ahí en alguna parte.

Cualquier consejo sobre por qué las solicitudes vuelven vacías y cómo encontrarlas sería muy apreciado.

Actualización: también intenté hacer el componente ReCaptcha en varias partes y excluí la carga del archivo. El resultado sigue siendo el mismo que la respuesta está vacía, dejándome con la conclusión original de que el problema es la presentación de formas múltiples.


Gracias al libro de Wicket In Action, encontré la solución:

MultipartServletWebRequest multiPartRequest = webRequest.newMultipartWebRequest(getMaxSize(), "ignored"); // multiPartRequest.parseFileParts(); // this is needed since Wicket 6.19.0+ IRequestParameters params = multiPartRequest.getRequestParameters();

me permite leer los valores ahora usando el método getParameterValue ().