上传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/>
<<<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>
<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/>
<<<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>
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)
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;试试看。。
http://blog.csdn.net/oyxm0/article/details/7015958
.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)
File: null
FileName: null
saved : D:\Program Files\Apache Software Foundation\Tomcat 5.5\webapps\login\upload\null
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)
commons-io-1.1.jar
这两个包加了吗?