上传UpLoad.jsp:
<s:actionerror/>
      
   <s:form action="upload" enctype="multipart/form-data" method="post">
   <s:label value="上传文件"/>
   <s:file name="picture" label="文件一"/>
  
   <s:submit value=" 开始上传 " method="upload"></s:submit>
   </s:form>
上传成功页面 UploadList.jsp:
<body>
    文件已经保存到:
<a href="upload/<s:property value="pictureFileName" />"
target=_blank><s:property value="pictureFileName" />
</a>
<br/>
<br/>
&lt;&lt;<a href="upload.action">继续上传</a>
  </body>
UploadAction:
public class UploadAction extends ActionSupport{
private static final long serialVersionUID = -60950803930068947L; private File picture; private String pictureContentType; private String pictureFileName; public String execute() {

  

return "input1";
} public String upload() throws Exception {
        


System.out.println("Context: "+ ServletActionContext.getServletContext().getRealPath("upload")); System.out.println("File: " + picture); System.out.println("FileName: " +pictureFileName );

File saved = new File(ServletActionContext.getServletContext()
.getRealPath("upload"), pictureFileName);

System.out.println("saved : " +saved); InputStream ins = null;
OutputStream ous = null; try {
saved.getParentFile().mkdirs(); ins = new FileInputStream(picture);
ous = new FileOutputStream(saved); byte[] b = new byte[1024];
int len = 0; while ((len = ins.read(b)) != -1) {
ous.write(b, 0, len);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (ous != null)
ous.close();
if (ins != null)
ins.close();
} return "list";
} public File getPicture() {
return picture;
} public void setPicture(File file) {
this.picture = file;
} public String getPictureContentType() {
return pictureContentType;
} public void setPictureContentType(String fileContentType) {
this.pictureContentType = fileContentType;
} public String getPictureFileName() {
return pictureFileName;
} public void setPictureFileName(String fileFileName) {
this.pictureFileName = fileFileName;
}
}
struct.xml:
<action name="upload" class="cn.gov.pbc.action.UploadAction" method="upload">
<interceptor-ref name="fileUpload">
<param name="allowedTypes">image/bmp,image/x-png,image/gif,image/jpeg</param>
<param name="maximumSize">204800</param>
</interceptor-ref>
<interceptor-ref name="defaultStack" />
<result name="input1">/UpLoad.jsp</result>
<result name="list">/UploadList.jsp</result>
</action>
 

解决方案 »

  1.   

    报错信息为:
    type Exception report
    message 
    description The server encountered an internal error () that prevented it from fulfilling this request.
    exception 
    javax.servlet.ServletException
    org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:518)
    org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:421)
    cn.gov.pbc.action.Zn.doFilter(Zn.java:35)root cause java.lang.NullPointerException
    java.io.File.<init>(File.java:234)
    cn.gov.pbc.action.UploadAction.upload(UploadAction.java:105)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    java.lang.reflect.Method.invoke(Method.java:585)
    com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:399)
    com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:262)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:224)
    com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:213)
    com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86)
    com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)
    com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)
    com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)
    com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:150)
    org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:48)
    com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86)
    com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)
    com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)
    com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)
    com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:123)
    com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)
    com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)
    com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)
    com.opensymphony.xwork2.interceptor.ParametersInterceptor.intercept(ParametersInterceptor.java:161)
    com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)
    com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)
    com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)
    com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:105)
    com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)
    com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)
    com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)
    org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:83)
    com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)
    com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)
    com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)
    org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:207)
    com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)
    com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)
    com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)
    com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:74)
    com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)
    com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)
    com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)
    com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:127)
    com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)
    com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)
      

  2.   

    你把
    System.out.println("Context: "+ ServletActionContext.getServletContext().getRealPath("upload"));
    System.out.println("File: " + picture);
    System.out.println("FileName: " +pictureFileName );
    下面的代码屏蔽掉,看看能不能获取到文件名。。或者
    File saved = new File(ServletActionContext.getServletContext()
    .getRealPath("upload"), pictureFileName);改为ServletActionContext.getServletContext()
    .getRealPath("upload")+"\\"+pictureFileName;试试看。。
      

  3.   

    没必要这样去做,这样麻烦,struts2也不是这样搞上传的吧!我的博客写了
    http://blog.csdn.net/oyxm0/article/details/7015958
      

  4.   

    将File saved = new File(ServletActionContext.getServletContext()
    .getRealPath("upload"), pictureFileName);改为ServletActionContext.getServletContext()
    .getRealPath("upload")+"\\"+pictureFileName;后仍报错但页面跳转至上传成功的页面,控制台信息如下:Context: D:\Program Files\Apache Software Foundation\Tomcat 5.5\webapps\login\upload
    File: null
    FileName: null
    saved : D:\Program Files\Apache Software Foundation\Tomcat 5.5\webapps\login\upload\null
    java.lang.NullPointerException
    at java.io.FileInputStream.<init>(FileInputStream.java:103)
    at cn.gov.pbc.action.UploadAction.upload(UploadAction.java:116)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:585)
    at com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:399)
    at com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:262)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:224)
    at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:213)
    at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86)
    at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)
    at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)
    at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)
    at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:150)
    at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:48)
    at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86)
    at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)
    at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)
    at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
      

  5.   

    控制台信息如下:Context: D:\Program Files\Apache Software Foundation\Tomcat 5.5\webapps\login\upload
    File: null
    FileName: null
    saved : D:\Program Files\Apache Software Foundation\Tomcat 5.5\webapps\login\upload\null
    java.lang.NullPointerException
    获取不到文件名
      

  6.   

    同样报错:root cause java.lang.NullPointerException
    java.io.File.<init>(File.java:277)
    cn.gov.pbc.action.MyUpAction.execute(MyUpAction.java:31)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    java.lang.reflect.Method.invoke(Method.java:585)
      

  7.   

    你的struts2的配置文件怎么这么配置,我没有那么配置过,不懂!
      

  8.   

    commons-fileupload-1.1.1.jar
    commons-io-1.1.jar
    这两个包加了吗?
      

  9.   

    struts2上传很显然的啊   页面的file框   name="image"  action继承actionSupport后  定义  private file image   private String imageFileName   保证名字都一样    就ok了
      

  10.   

    问题解决了,将struct.xml:<action name="upload" class="cn.gov.pbc.action.UploadAction" method="upload">中的method="upload"就OK了