<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<%@taglib uri="/struts-tags" prefix="s"  %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'succ.jsp' starting page</title>
    
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">    
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->  </head>
  
  <body>
上传成功!<br>
文件标题:<s:property value=" +title" /><br>
文件为:<img src="<s:property value="'upload/'+uploadFileName"/>"> <br>
  </body>
</html>
package liu;import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;import org.apache.struts2.ServletActionContext;import com.opensymphony.xwork2.ActionSupport;public class UploadAction extends ActionSupport {
private String savePath;
private String title;
private File upload;
private String uploadContentType;
private String uploadFileName; @Override
public String execute() throws Exception {
System.out.println(getUpload());
FileOutputStream fos = new FileOutputStream(getSavePath() + "\\"
+ getUploadFileName());
FileInputStream fis = new FileInputStream(getUpload());
byte[] buffer = new byte[1024 * 10];
int len = 0;
while ((len = fis.read(buffer)) > 0) {
fos.write(buffer, 0, len);
}
return SUCCESS;
} @SuppressWarnings("deprecation")
public String getSavePath() {
return ServletActionContext.getRequest().getRealPath(savePath);
} public String getTitle() {
return title;
} public File getUpload() {
return upload;
} public String getUploadContentType() {
return uploadContentType;
} public String getUploadFileName() {
return uploadFileName;
} public void setSavePath(String savePath) {
this.savePath = savePath;
} public void setTitle(String title) {
this.title = title;
} public void setUpload(File upload) {
this.upload = upload;
} public void setUploadContentType(String uploadContentType) {
this.uploadContentType = uploadContentType;
} public void setUploadFileName(String uploadFileName) {
this.uploadFileName = uploadFileName;
}}
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">    
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
  </head>
  
  <body>
   <form action="lee/upload" method="post" enctype="application/x-www-form-urlencoded">
文件标题:<input type="text" name="title" /><br>
选择文件:<input type="file" name="upload" /><br>
<input type="submit" value="上传" >
</form>
  </body>
</html>

解决方案 »

  1.   

    <?xml version="1.0" encoding="GBK" ?>
    <!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
        "http://struts.apache.org/dtds/struts-2.0.dtd">
    <struts>
    <constant name="struts.custom.i18n.resources" value="globalMessages" />
    <constant name="struts.i18n.encoding" value="gbk" />
    <package name="lee" extends="struts-default">
    <action name="upload" class="liu.UploadAction">
    <param name="savePath">/upload</param>
    <result name="SUCCESS">succ.jsp</result>
    </action>
    </package>
    </struts>配置文件报错:
    2010-10-5 22:20:48 com.opensymphony.xwork2.util.logging.commons.CommonsLogger warn
    警告: Error setting expression 'upload' with value '[Ljava.lang.String;@15bc6c8'
    ognl.MethodFailedException: Method "setUpload" failed for object liu.UploadAction@1cb7a1 [java.lang.NoSuchMethodException: liu.UploadAction.setUpload([Ljava.lang.String;)]
    at ognl.OgnlRuntime.callAppropriateMethod(OgnlRuntime.java:1265)
    at ognl.OgnlRuntime.setMethodValue(OgnlRuntime.java:1454)
    at ognl.ObjectPropertyAccessor.setPossibleProperty(ObjectPropertyAccessor.java:85)
    at ognl.ObjectPropertyAccessor.setProperty(ObjectPropertyAccessor.java:162)
    at com.opensymphony.xwork2.ognl.accessor.ObjectAccessor.setProperty(ObjectAccessor.java:28)
    at ognl.OgnlRuntime.setProperty(OgnlRuntime.java:2225)
    at com.opensymphony.xwork2.ognl.accessor.CompoundRootAccessor.setProperty(CompoundRootAccessor.java:65)
    at ognl.OgnlRuntime.setProperty(OgnlRuntime.java:2225)
    at ognl.ASTProperty.setValueBody(ASTProperty.java:127)
    at ognl.SimpleNode.evaluateSetValueBody(SimpleNode.java:220)
    at ognl.SimpleNode.setValue(SimpleNode.java:301)
    at ognl.Ognl.setValue(Ognl.java:737)
    at com.opensymphony.xwork2.ognl.OgnlUtil.setValue(OgnlUtil.java:198)
    at com.opensymphony.xwork2.ognl.OgnlValueStack.setValue(OgnlValueStack.java:161)
    at com.opensymphony.xwork2.ognl.OgnlValueStack.setValue(OgnlValueStack.java:149)
    at com.opensymphony.xwork2.interceptor.ParametersInterceptor.setParameters(ParametersInterceptor.java:276)
    at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:187)
    at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
    at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195)
    at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
    at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:179)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
    at org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:75)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
    at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:94)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
    at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:235)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
    at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:89)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
    at com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:130)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
    at org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:267)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
    at com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:126)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
    at com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:138)
    at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
    at com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:165)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
    at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
    at com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:179)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
    at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:176)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
    at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52)
    at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:488)
    at org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:395)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
    at java.lang.Thread.run(Thread.java:619)
    Caused by: java.lang.NoSuchMethodException: liu.UploadAction.setUpload([Ljava.lang.String;)
    at ognl.OgnlRuntime.callAppropriateMethod(OgnlRuntime.java:1206)
    ... 63 more
      

  2.   

    很明显类型错误了,个人觉得,enctype="application/x-www-form-urlencoded" 换成enctype="multipart/form-data"
      

  3.   

    试试3楼的方法~     public void setUpload(File upload) {
            this.upload = upload;
        }Struts这么神奇吗?能用File对象直接做参数吗?
    我一直都是从request里面取文件流......观望结果
      

  4.   

    这会儿正忙,没时间细看,不过跟你贴点儿核心代码参考下   upload.jsp <form action="<%=basePath%>admin/upLoad.action" method="post" enctype="multipart/form-data">
    <div style="padding-top:100px;padding-left:100px;">
        <strong>文件上传</strong><br>
         filepath:<input type="file" name="testFile"><br>
        <input type="submit" value="upload">
        </div></form>
    UploadActionpublic class UploadAction extends BaseAction { public File[] testFile;
    public String[] testFileFileName; //上传文件
    public String upLoad()
    {
    for (String filename : testFileFileName) {
      String webFileName= this.createFileName(filename.substring(filename.indexOf(".") + 1));    
      this.writeFile(testFile[0],webFileName);
      request.setAttribute("filename", filename);
      request.setAttribute("webFileName", webFileName);
    }
    return SUCCESS;
    }

    //下载文件
    public String downLoad()
     {
    String fileName =request.getParameter("webFileName");
    this.readFile(fileName);
    return null;
    }

    public String demo()
    {
    return null;
    }
    }
    download.jsp
    <body>
      <div style="padding-top:100px;padding-left:100px;">
      <br>
      <font style="color:red;">文件上传成功!</font><br>
      
     您上传的文件:${filename }<a href="<%=basePath%>admin/downLoad.action?webFileName=${webFileName}">查看</a>&nbsp; <a href="<%=basePath%>admin/downLoad.action?webFileName=${webFileName}">下载</a>
     <br> <br>
      <a href="<%=basePath%>/index.jsp">返回继续上传</a></div>
      </body>如果需要,加我qq1552090606,给你一个可直接运行最简洁版的struts2上传下载例子。
      

  5.   

    struts本身就提供了现成的文件上传组件,不用再自己实现了,好好百度谷歌一下即可。
      

  6.   

    我们在页面中都使用enctype="multipart/form-data" ,然后在对应的struts的action配置中加此拦截配置:<interceptor-ref name="fileUpload"></interceptor-ref>
      

  7.   


     需要文件上传的form肯定是 enctype="multipart/form-data"struts2果然够牛逼。文件上传真简单,给楼主个struts2的文件上传例子,希望有所帮助
    http://www.roseindia.net/struts/struts2/struts-2-file-upload.shtml