我有一个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,但它不起作用。
如何解决此问题?