如何解决在jsp页面上导入.xls文件报错问题

  在jsp页面上导入.xls文件,报错:

  java.io.IOException: Posted content type isn't multipart/form-data

  at com.oreilly.servlet.multipart.MultipartParser.<init>(MultipartParser.java:166)

  at com.oreilly.servlet.MultipartRequest.<init>(MultipartRequest.java:222)

  at org.apache.jsp.dxt.sms.multi_005fsender.upload_jsp._jspService(upload_jsp.java:406)

  at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)

  at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

  at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:386)

  at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)

  at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)

  at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

  at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)

  at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)

  at sdcncsi.ict.security.AclFilter.doFilter(AclFilter.java:78)

  at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)

  at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)

  at sdcncsi.ict.web.RequestFilter.doFilter(RequestFilter.java:108)

  at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)

  at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)

  at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:96)

  at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)

  at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)

  at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)

  at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)

  at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)

  at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)

  at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)

  at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)

  at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)

  at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)

  at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)

  at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)

  at java.lang.Thread.run(Thread.java:619)

  不知道是什么原因?应该怎样来解决呢?

  解决这个错误,需要在form表单里面加上加enctype=”multipart/form-data” 这个属性,不过表单请求传到另一个jsp或servlet里时,是不能用request.getParameter()来获取到各个表单元素的值的,如下:

  

复制代码 代码如下:

  <%@ page language="java" contentType="text/html; charset=UTF-8"

  pageEncoding="UTF-8"%>

  <%@ page session="false"%>

  <%@ include file="/common/taglibs.jsp"%>

  <%@ include file="/common/meta.jsp"%>

  <%@ include file="/common/js.jsp"%>

  <%@ page import="java.util.*"%>

  <%@ page import="java.text.SimpleDateFormat"%>

  <%@ page import="sdcncsi.ict.util.SysPara"%>

  <%@page import="java.io.*,java.util.*,sdcncsi.ict.base.attachment.*"%>

  <%@ page import="sdcncsi.ict.util.RequestUtil"%>

  <%@page import="com.oreilly.servlet.MultipartRequest"%>

  <%

  String res="true";

  request.setCharacterEncoding("UTF-8");

  response.setContentType("text/html; charset=UTF-8");

  String file=(String)request.getParameter("t_file_excel");

  //System.out.println(file);

  String accountid3=(String)request.getParameter("accountid3");

  String saveDirectory = "";

  //获取配置参数,文件类型,文件大小

  /*String date = "";

  SimpleDateFormat gs = new SimpleDateFormat("yyyyMMdd");

  Date now = new Date();

  date = gs.format(now);*/

  FileFuns fileFuns = new FileFuns();

  try {

  //判断文件类型

  String file_type=SysPara.getValue("dxt_sms_multi_sender_file_type");

  if(!file.substring(file.lastIndexOf(".")+1).equals(file_type))

  {

  out.println("<script>");

  out.println("alert('错误:文件类型错误!');");

  out.println("</script>");

  return;

  }

  //判断文件夹是否存在,不存在创建

  String file_path = SysPara.getValue("dxt_sms_multi_sender_file_path");

  file_path=file_path.replace("\\","//");

  if (!fileFuns.getFileIsExists(file_path)) {

  fileFuns.Createdir(file_path);

  }

  String file_size = SysPara.getValue("dxt_sms_multi_sender_file_size");

  //文件上传后,保存在saveDirectory

  saveDirectory = file_path;

  RandomFileRenamePolicy rfrp = new RandomFileRenamePolicy();

  MultipartRequest multi = null;

  System.out.println("saveDirectory"+saveDirectory);

  System.out.println("file_size"+file_size);

  multi = new MultipartRequest(request, saveDirectory, Integer

  .parseInt(file_size), "utf-8", rfrp);

  System.out.println("222"+multi);

  //输出反馈信息

  Enumeration files = multi.getFileNames();

  while (files.hasMoreElements()) {

  String name = (String) files.nextElement();

  File f = multi.getFile(name);

  if (f != null) {

  String fileName = multi.getFilesystemName(name);

  saveDirectory+=fileName;

  }

  }

  } catch (Exception eu) {

  res="false";

  eu.printStackTrace();

  out.println("<script>");

  out.println("alert('错误:文件大小超出限制!');");

  out.println("</script>");

  }

  %>

  <head>

  <script type="text/javascript">

  function myunload(){

  window.opener.callback_getPageData_table_list(1);

  }

  </script>

  <base target="_self">

  </head>

  <body onunload="myunload()">

  <a id="reload" href='' style="display:none"></a>

  </body>

  <script>

  var res='<%=res%>';

  if(res=='true')

  {

  sys_ajaxPost("/dxt/multi_sender.do?method=importmulti_sender&accountid=<%=accountid3%>&excelpath=<%=saveDirectory %>","",function(msg){

  if(msg.result==true){

  location.href="${ctx}/dxt/sms/multi_sender/multi_sender.jsp?result=true";

  }else{

  location.href="${ctx}/dxt/sms/multi_sender/multi_sender.jsp?result=false";

  }

  });

  }

  </script>