读取时HTTP Servlet请求丢失

时间:2016-05-03 18:09:31

标签: java servlets request fileinputstream

我有一个servlet来上传文件,通过POST请求有效负载从表单获取信息。

servlet如下:

@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");
}
}

问题是,如果我在String nome = convert(request.getPart("nome").getInputStream());中读取请求,则行List arquivos = servletFileUpload.parseRequest(request);中将收到空请求,反之亦然。我知道您只能阅读一次请求,所以我尝试了解决方案su here,但它不起作用。

如何解决此问题?

0 个答案:

没有答案
相关问题