ServletFileUpload sfupload= new ServletFileUpload(factory); 
List fileItems = sfupload.parseRequest(request); 
而这个fileItems老是为空啊,查了一下午才知道是FilterDispatcher 拦截器作的怪,好像改到了request里的内容 
如果项目中摘除Struts2或者不让<url-pattern>/*</url-pattern>就可以正常工作,现在的问题是摘除Struts2和/* 有什么办法能够解决啊,论坛里的高手能不能提供点好点的解决方法,比如:改FilterDispatcher 里的东东,或者其它的好点的解决方案

解决方案 »

  1.   


    <filter>
      <filter-name>struts2</filter-name>
      <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
    </filter>
    <filter-mapping>
      <filter-name>struts2</filter-name>
      <url-pattern>/*</url-pattern>
    </filter-mapping>
    里面的/*改成/*.action然后用普通的servlet代替action做上传处理。 
      

  2.   

    不能将<url-pattern>/*</url-pattern>中的"/*"改为"*.action"否则struts2中的标签你就没法用了。
    这是我做的一个上传:红色部分(uploadFile)是对应的jsp页面上传控件的id。使用上传必须有以下几个步骤:
       一、在项目中添加commons-fileupload-1.x.x.jar、commons-io-1.x.x.jar两个包(你懂得!)。
       二、把页面中form表单的enctype属性设置为:”multipart/form-data”,并设置method属性值为:post。否则不会编译成功的。
       三、便是在action中编写以下代码:
             private File uploadFile;  //得到上传的文件
       private String uploadFileContentType;  //得到文件的类型
    private String uploadFileFileName;  //得到上传文件名称
    public File getUploadFile() {
    return uploadFile;
    }
    public void setUploadFile(File uploadFile) {
    System.out.println("文件"+uploadFile);
    this.uploadFile = uploadFile;
    }
    public String getUploadFileContentType() {
    return uploadFileContentType;
    }
    public void setUploadFileContentType(String uploadFileContentType) {
    this.uploadFileContentType = uploadFileContentType;
    }
    public String getUploadFileFileName() {
    return uploadFileFileName;
    }
    public void setUploadFileFileName(String uploadFileFileName) {
    this.uploadFileFileName = uploadFileFileName;
    }

    /**
     * @return
     */
    public String uploadFile() throws Exception {
    //System.out.println("进来了!");
    // TODO Auto-generated method stub
    String realpath=ServletActionContext.getServletContext().getRealPath("/images");
    System.out.println("上传文件名称:"+uploadFileFileName);
    //自定义上传文件名称
    uploadFileFileName="测试哈"+uploadFileFileName.substring(uploadFileFileName.lastIndexOf("."));
    System.out.println("上传文件类型:"+uploadFileContentType);
    System.out.println("要上传的路径:"+realpath);
    File file=new File(realpath);

    if(!file.exists())file.mkdirs();
    FileUtils.copyFile(uploadFile, new File(file,uploadFileFileName));
    return "sc";
    }
      

  3.   

    楼主是想不用strut2封装的上传 改为commons fileupload坐上传 可以方便的监控进度。最近也遇到这个问题 正寻求解决方法
      

  4.   

    我一般是用 MultipartRequest 实现上传,这个类很方便 
      

  5.   

    fileupload的方法用io操作的话,需要设置拦截器。学习一下!