使用MultiPart表单时更新数据库表而不上载文件 - JavaEE,Servlet

时间:2013-02-14 12:32:15

标签: java java-ee exception servlets

我有一个servlet,负责让用户同时更新报告表并上传报告。我编写的代码可以让用户上传文档,也可以使用其他详细信息更新表格,例如提交日期等。 但是,并非所有时间用户都必须上传文档。在这种情况下,用户应该可以编辑报告的详细信息,稍后再回来上传文件。即,用户可以提交表单而不选择文件,它仍然会更新表格。 这部分是不起作用的。如果用户选择文件并进行一些更改。代码有效。如果用户没有选择文件并尝试提交表单,它会重定向到我的servlet但它是空白的。没有堆栈跟踪。不会抛出任何错误。 下面是我在servlet中的代码的一部分:

if(param.equals("updateschedule"))
                {

                    String[] allowedextensions = {"pdf","xlsx","xls","doc","docx","jpeg","jpg","msg"};
            final String path = request.getParameter("uploadlocation_hidden");
                    final Part filepart=request.getPart("uploadreport_file");

                    int repid = Integer.parseInt(request.getParameter("repid_hidden"));
            int reptype = Integer.parseInt(request.getParameter("reporttype_select"));
                        String webdocpath = request.getParameter("doclocation_hidden");
            String subperiod = request.getParameter("submitperiod_select");
            String duedate = request.getParameter("reportduedate_textfield");
            String repname = request.getParameter("reportname_textfield");
            String repdesc = request.getParameter("reportdesc_textarea");
            String repinstr = request.getParameter("reportinst_textarea");
            int repsubmitted = Integer.parseInt(request.getParameter("repsubmitted_select"));
            String datesubmitted = request.getParameter("reportsubmitdate_textfield");
            final String filename = getFileName(filepart);                
            OutputStream out = null;
            InputStream filecontent=null;
                    String extension = filename.substring(filename.lastIndexOf(".") + 1, filename.length());
                     if(Arrays.asList(allowedextensions).contains(extension))
                     {
                         try
                         {
                             out=new FileOutputStream(new File(path+File.separator+filename));
                 filecontent = filepart.getInputStream();
                 int read=0;
                 final byte[] bytes = new byte[1024];
                 while((read=filecontent.read(bytes))!=-1)
                    {
                   out.write(bytes,0,read);             
                    }
                             String fulldocpath = webdocpath+"/"+filename;
                             boolean succ = icreditdao.updatereportschedule(repid, reptype, subperiod, repname, repsubmitted,datesubmitted, duedate,fulldocpath, repdesc, repinstr);
                             if(succ==true)
                             {
                                 response.sendRedirect("/webapp/Pages/Secured/ReportingSchedule.jsp?msg=Report Schedule updated successfully");

                             }

                         }
                         catch(Exception ex)
                         {
                          throw new ServletException(ex);
                         }



                     }

我还在教自己javaee。任何帮助将不胜感激。也开放其他替代品。我曾想过使用jquery来检测文件是否被选中,然后使用不同的代码集。例如

if(param.equals("updatewithnofileselected"))
{//update code here} 

但我认为必须有更好的解决方案。使用jdk6,servlet3.0。

1 个答案:

答案 0 :(得分:0)

尝试这个。

MultipartParser parser = new MultipartParser(request, 500000000, false, false, "UTF-8");
  Part part;
   while ((part = parser.readNextPart()) != null) {
      if(part.isParam()){
          if(part.isFile()){
              if(part.getName().equals("updatewithnofileselected")){
                   //update code here.
              } else if(part.getName().equals("updateschedule")) {
                   //updateschedule
              }
          }
    }
 }

当我使用Multipart-form时,我使用了这个,它工作正常。