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