如果你描述的没有问题的话,应该是fileupload组件自身的问题
但是建议你做这样的修改
while (ite.hasNext()) 
==>
while (ite != null && ite.hasNext()) 
在使用一个变量之前判断一下是不是有效

解决方案 »

  1.   

    问题已经解决了,是isFieldName()这个方法的应用问题,parseRequest(request)这个方法能够得到的是你表单的全部空间信息,而我们要用isFieldName()这个方法来分析出哪个是“file”表单上传的内容。修改代码如下:public void doPost(HttpServletRequest request, HttpServletResponse response) 
    throws ServletException, IOException { String uploadpath = "F:\\temp"; 
    File temppath = new File("../tmp"); 
    request.setCharacterEncoding("gb2312"); response.setContentType("text/html;charset=gb2312"); 
    PrintWriter out = response.getWriter(); DiskFileItemFactory factory = new DiskFileItemFactory(); 
    factory.setSizeThreshold(4096 * 1024); 
    factory.setRepository(temppath); 
    ServletFileUpload upload = new ServletFileUpload(factory); 
    upload.setHeaderEncoding("gb2312"); try { 
    List <FileItem> items = upload.parseRequest(request); 
    Iterator ite = items.iterator(); 
    while (ite.hasNext()) { FileItem item = (FileItem) ite.next(); 
    if(!item.isFormField())    //查看是否是file表单的内容
    out.print(item.getFieldName()); String filename = item.getName(); 
    filename = filename.substring(filename.lastIndexOf("\\") + 1); 
    File file = new File(uploadpath, filename); 
    out.print(filename); 
    //item.write(file); 

    } } catch (FileUploadException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
    } catch (Exception e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
    } }