I have a servlet to upload a file, getting information from a form through a POST by request payload.
The servlet is as below:
@MultipartConfig
public class UploadMultiploAuxiliar extends HttpServlet {
private static final long serialVersionUID = 1L;
Dataset dataset = new Dataset();
public UploadMultiploAuxiliar() {
super();
}
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
}
protected void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
System.out.println("FREE ### ....Iniciando o upload UploadMultiploAuxiliar");
PrintWriter out = null;
try {
String nome = convert(request.getPart("nome").getInputStream());
String comentarios = convert(request.getPart("comentarios").getInputStream());
String tags = convert(request.getPart("tags").getInputStream());
Boolean expira = Boolean.valueOf(convert(request.getPart("expira").getInputStream()));
String periodoNotificacao = convert(request.getPart("periodoNotificacao").getInputStream());
String validoDe = convert(request.getPart("validoDe").getInputStream());
String validoAte = convert(request.getPart("validoAte").getInputStream());
String tipo = convert(request.getPart("tipo").getInputStream());
String assunto = convert(request.getPart("assunto").getInputStream());
String path = "";
System.out.println("FRE ### nome " + convert(request.getPart("nome").getInputStream()));
System.out.println("FRE ### comentarios " + convert(request.getPart("comentarios").getInputStream()));
System.out.println("FRE ### tags " + convert(request.getPart("tags").getInputStream()));
System.out.println("FRE ### expira " + convert(request.getPart("expira").getInputStream()));
System.out.println("FRE ### periodo de notificacao " + convert(request.getPart("periodoNotificacao").getInputStream()));
System.out.println("FRE ### validoDe " + convert(request.getPart("validoDe").getInputStream()));
System.out.println("FRE ### tipo " + convert(request.getPart("tipo").getInputStream()));
System.out.println("FRE ### assunto " + convert(request.getPart("assunto").getInputStream()));
//System.out.println("FRE ### path " + request.getParameter("path"));
DateFormat df = new SimpleDateFormat("dd/MM/yyyy");
Date validadeDe = df.parse(validoDe);
Date validadeAte = df.parse(validoAte);
GregorianCalendar de = new GregorianCalendar();
GregorianCalendar ate = new GregorianCalendar();
de.setTime(validadeDe);
ate.setTime(validadeAte);
XMLGregorianCalendar xmlDateDe = DatatypeFactory.newInstance().newXMLGregorianCalendar(de.get(Calendar.YEAR), de.get(Calendar.MONTH)+1, de.get(Calendar.DAY_OF_MONTH), validadeDe.getHours(),validadeDe.getMinutes(),validadeDe.getSeconds(),DatatypeConstants.FIELD_UNDEFINED, de.getTimeZone().LONG).normalize();
XMLGregorianCalendar xmlDateAte = DatatypeFactory.newInstance().newXMLGregorianCalendar(ate.get(Calendar.YEAR), ate.get(Calendar.MONTH)+1, ate.get(Calendar.DAY_OF_MONTH),validadeAte.getHours(),validadeAte.getMinutes(),validadeAte.getSeconds(),DatatypeConstants.FIELD_UNDEFINED, ate.getTimeZone().LONG).normalize();
FileItemFactory fileItemFactory = new DiskFileItemFactory();
ServletFileUpload servletFileUpload = new ServletFileUpload(fileItemFactory);
List arquivos = servletFileUpload.parseRequest(request);
Iterator iterator = arquivos.iterator();
System.out.println("arquivos = "+arquivos);
while (iterator.hasNext()) {
FileItem fileItem = (FileItem) iterator.next();
System.out.println("FRE UploadMultiploAuxiliar ======== NOME =========");
System.out.println(fileItem.getName());
System.out.println("FRE ======================");
if (fileItem.getName() != null) {
dataset.createDocument(nome, comentarios, tags, expira, periodoNotificacao, xmlDateDe, xmlDateAte, tipo, assunto,path);
} else {
System.out.println("Documento não criado.");;
}
}
} catch (FileUploadException e) {
out = response.getWriter();
out.print("false");
e.printStackTrace();
} catch (Exception e) {
out = response.getWriter();
out.print("false");
e.printStackTrace();
}
}
public String convert(InputStream is) throws IOException{
return IOUtils.toString(is, "UTF-8");
}
}
The problem is, if I read the request in String nome = convert(request.getPart("nome").getInputStream());
, in the line List arquivos = servletFileUpload.parseRequest(request);
will receive a empty request, or vice-versa. I know that you can only read the request once, so I tried the solution sugested here, but it doesnt work.
How can I get this problem solved?