我想上传文件
jsp页面的表单中:
<form id="form1" name="form1" onsubmit="return check()"
method="post" enctype="multipart/form-data" action="<%=request.getContextPath() %>/song.do">地址:<input name="saddress" type="file" id="saddress" />如果没有 enctype="multipart/form-data" 那么程序可以正常运行
但是 这句是上传格式必须用到的啊,我加上这句,再运行
就报异常 java.lang.IllegalArgumentException 说参数SongForm.java内容:private String saddress;public String getSaddress() {
return saddress;
}
public void setSaddress(String saddress) {
this.saddress = saddress;
}

解决方案 »

  1.   

    查到struts有关上传的资料了,问题解决了,哈哈~
      

  2.   

    如果lz使用的是struts的话,需要写一个类继承
    org.apache.struts.action.RequestProcessor
    主要是override,doForward这个方法就可以了。原因参考:http://www.ojava.net/simple/index.php?t2900.html
    package xxx;
    import java.io.IOException;import javax.servlet.ServletException;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;import org.apache.struts.upload.MultipartRequestWrapper;
    public class RequestProcessor extends org.apache.struts.action.RequestProcessor {    protected void doForward(String uri, HttpServletRequest request,
                HttpServletResponse response) throws IOException, ServletException {
            HttpServletRequest myRequest = request;
            if (request instanceof MultipartRequestWrapper) {
                myRequest = ((MultipartRequestWrapper) request).getRequest();
            }
            super.doForward(uri, myRequest, response);
        }
    }
      

  3.   

    struts中post方式上传文件,enctype="multipart/form-data",request.getParameter("file") 是null的问题分析 这两天连续看到有人提到:struts中post方式上传文件,enctype="multipart/form-data",request.getParameter("file")时候,得到一个Null,或者直接得到 java.lang.IllegalArgumentException 这样一个异常。结合到自己以前也遇到过这个问题,于是上网搜索了一些资料,下面这位网友的说法我觉得有些道理,因此摘抄下来。使用struts进行文件上传,如果有些参数没有完全定义在ActionForm中,需要从request.getParameter获取,在表单提交并且validate失败返回input页面时,这部分需要从request.getPrameter获取的参数数据都丢失了,即使再对request进行multipart解析也不能得到。经过分析,发现struts的ActionServlet在接收到multipart请求之后,在RequestProcessor中会对request进行封装:MultiRequestWrapper,然后在Action执行完之后,又将已经封装的request重新还原。以下是部分代码,截直RequestProcessor:封装: 下面是struts的源代码:protected HttpServletRequest processMultipart(HttpServletRequest request) {    if (!"POST".equalsIgnoreCase(request.getMethod())) {
            return (request);
        }
        
        String contentType = request.getContentType();
        if ((contentType !=null) &&
            contentType.startsWith("multipart/form-data")) {
            return (new MultipartRequestWrapper(request));
        }else{
            return (request);
        }  }接下来我们需要作的就是将已经封装成MultipartRequestWrapper的HttpServletRequest进行还原。
    解决方法: 
    ① 写一个类,继承org.apache.struts.action.RequestProcessor ,并且override其中的doForward方法来进行解析。package org.luyang;
    import java.io.IOException;import javax.servlet.ServletException;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;import org.apache.struts.upload.MultipartRequestWrapper;public class RequestProcessor extends org.apache.struts.action.RequestProcessor {    protected void doForward(String uri, HttpServletRequest request,  HttpServletResponse response) throws IOException, ServletException {
            HttpServletRequest myRequest = request;
            if (request instanceof MultipartRequestWrapper) {
                myRequest = ((MultipartRequestWrapper) request).getRequest();
            }
            super.doForward(uri, myRequest, response);
        }
    }②在自己的struts-config.xml的<struts-config></struts-config>之间加入下面这句话  <controller processorClass="org.luyang.RequestProcessor" />
      <message-resources parameter="ApplicationResources"/>以上是我现在知道的解决方案,不知道能不能暂时解决大家的问题。
      

  4.   

    不好意思,这几天不在,所以没有回复大家,错误是这样的,struts接收Form中file控件传来的值,默认是String类型,而需要上传时候file传来的值是以enctype="multipart/form-data"方式,因此:struts-form中:private String saddress 改为 private FormFile saddress;
    struts-action中:
        String saddress = songForm.getSaddress() 改为
        FormFile saddress = songForm.getSaddress();
      

  5.   

    songForm是我这个程序中的struts-Form