0

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?

Community
  • 1
  • 1
  • You're mixing 2 different approaches to parse an uploaded file. Use the one or the other, not both. – BalusC May 03 '16 at 18:47
  • How can I make ServletFileUpload receive the InputStream from getPart("myfile").getInputStream()? – Bruno Camargo May 03 '16 at 19:30
  • If you want to use `ServletFileUpload` instead of `getPart()`, then just stop using `getPart()` (and remove `@MultipartConfig` altogether so you can't accidentally use it). Again, see the duplicate how (and why) to properly use the one or other way. – BalusC May 03 '16 at 20:48
  • I dont know the diference between this 2 neither its similarities. Im used to ServletFileUpload because thats how I was taught. Now with your response in the duplicate quesion, I want to use getPart(). How can I use it? Im new to java... – Bruno Camargo May 04 '16 at 12:43

0 Answers0