java中,使用servlet上传文件没有反应,但控制台输出“上传成功”,求大神相助,代码如下不想用控件上传
jsp代码如下:
<form action="/vats/upfileServlet.do" method="post" encType=multipart/form-data >
         图片:<input type="file" name="img"/>
     <input type="submit" value="提交"/>
     </form>
servlet中:public void doPost(HttpServletRequest request, HttpServletResponse response)
  throws ServletException, IOException {
  response.setContentType("text/html");
  request.setCharacterEncoding("UTF-8");
  response.setCharacterEncoding("UTF-8");
 
  DiskFileUpload du = new DiskFileUpload();
  du.setSizeMax(4194304); // 设置最大文件尺寸,这里是4MB
  du.setSizeThreshold(4096);// 设置缓存区大小 ,4 kb;
  // up 为 /WebRoot 下的 一个目录
  du.setRepositoryPath(request.getSession().getServletContext().getRealPath("/up"));// 设置缓存目录
  // 得到所有文件
  try {
  List list = du.parseRequest(request);
  Iterator it = list.iterator();
  while (it.hasNext()) {
  FileItem fileItem = (FileItem) it.next();
  String fileName = fileItem.getName();
  int index = fileName.lastIndexOf('.');
  fileName = fileName.substring(index);
  fileItem.write(new File(request.getSession()
  .getServletContext().getRealPath("/file")+ "/" + fileName));
  System.out.println("上传成功");
  }
  } catch (Exception e) {
  e.printStackTrace();
  }
  PrintWriter out = response.getWriter();
  out.flush();
  out.close();
  }

解决方案 »

  1.   

    <form action="/vats/upfileServlet.do" method="post" encType=multipart/form-data >
    upfileServlet.do 这个不是struts1吗?不加.do是servlet!如果struts2和servlet结合的话需要在web.xml中加上说明不然提交strut2的时候他会找servlet,应为strut2可以不加.action,那就和servlet提交方式一样了,这个时候就会报404错误,默认系统应该是先找servlet的!希望你在学SSH的时候如果需求用到servlet对你有帮助,mvc 现在java的好像还是用SSH,当然也要看是什么项目,有的也用mvc或者spring mvc
      

  2.   

    <form action="/vats/upfileServlet.do" method="post" encType=multipart/form-data >
    upfileServlet.do 这个不是struts1吗?不加.do是servlet!如果struts2和servlet结合的话需要在web.xml中加上说明不然提交strut2的时候他会找servlet,应为strut2可以不加.action,那就和servlet提交方式一样了,这个时候就会报404错误,默认系统应该是先找servlet的!希望你在学SSH的时候如果需求用到servlet对你有帮助,mvc 现在java的好像还是用SSH,当然也要看是什么项目,有的也用mvc或者spring mvc
      

  3.   

    System.out.println("上传成功");
    你while里只要执行就一定会输出这句话,我怎么感觉你这句话起不到判断的作用呢!你怎么判断的呢!servlet上传没用过,用的是struts2
      

  4.   

    输出上传成功,是你代码里写的哦。List list = du.parseRequest(request);
    如果list不为空,就会打印“上传成功”进去调试下,看request.getSession().getServletContext().getRealPath("/file")+ "/" + fileName
    是什么路径,是不是你想要的。
      

  5.   

    输出上传成功,是你代码里写的哦。List list = du.parseRequest(request);
    如果list不为空,就会打印“上传成功”进去调试下,看request.getSession().getServletContext().getRealPath("/file")+ "/" + fileName
    是什么路径,是不是你想要的。
      

  6.   

    同意3楼的说法,你那个打印语句起不到什么判断作用。至少也把  PrintWriter out = response.getWriter();
             out.flush();
             out.close();
    放到trycatch里边吧。
    另外可以打印下文件路径看是不是你想要的。