0

我有一个 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。

4

1 回答 1

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 时使用了这个,它工作正常。

于 2013-02-15T03:21:33.403 回答