upload.jsp

<%@page pageEncoding="utf-8"%>
<html>
    <head></head>
    <body>
        <h1>上传文件示例</h1>
        <form action="upload.action" enctype="multipart/form-data" method="post">
            <input type="file" name="some"/><br/>
            <input type="submit" value="提交"/>
        </form>
    </body>
</html>

struts.xml:

<!-- 这是一个文件上传到小例子 -->
<struts>
    <!-- 改变Struts2上传文件的最大限制 -->
    <constant name="struts.multipart.maxSize" value="5000000"></constant>
    <package name="demo" namespace="/demo" extends="struts-default">
        <!-- 转到上传页面的Action -->
        <action name="toUpload">
            <result name="success">/WEB-INF/upload.jsp</result>
        </action>
        <!-- 上传文件Action -->
        <action name="upload" class="com.tarena.action.UploadAction">
            <interceptor-ref name="fileUpload">
                <!-- 改变Action上传文件的限制 -->
                <param name="maximumSize">2000000</param>
            </interceptor-ref>
            <interceptor-ref name="basicStack"></interceptor-ref>
            <result name="success">/WEB-INF/ok.jsp</result>
            <result name="error">/WEB-INF/error.jsp</result>
        </action>
    </package>
</struts>

Action:

public class UploadAction implements ServletContextAware {
    // 输入属性
    private File some;
    private String someFileName;
    private ServletContext ctx;
    public String getSomeFileName() {
        return someFileName;
    }
    public void setSomeFileName(String someFileName) {
        this.someFileName = someFileName;
    }
    public File getSome() {
        return some;
    }
    public void setSome(File some) {
        this.some = some;
    }
    public String execute() {
        System.out.println("SOME" + some);
        System.out.println("FileName:" + someFileName);
        if (some == null) {
            return "error";
        }
        // 1、根据输入属性,构建存储的路径
                           
        // 指定上传文件名
        String name = "upload_" + someFileName;
        // 构建一个相对路径
        String path = "upload/" + name;
        // 根据相对路径,去构建绝对路径
        path = ctx.getRealPath(path);
        System.out.println("PATH:" + path);
        // 2、根据存储的路径,将输入属性复制到路径下
        FileUtil.copy(some, new File(path));
        // 3、返回特征字符串,找Result
        return "success";
    }
    public void setServletContext(ServletContext sc) {
        ctx = sc;
    }
}

FileUtil.java:提供文件复制

public class FileUtil {
    public static boolean copy(File src, File dest) {
        BufferedInputStream bis = null;
        BufferedOutputStream bos = null;
        try {
            bis = new BufferedInputStream(new FileInputStream(src));
            bos = new BufferedOutputStream(new FileOutputStream(dest));
            byte[] bts = new byte[1024];
            int len = -1;
            while ((len = bis.read(bts)) != -1) {
                bos.write(bts, 0, len);
            }
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        } finally {
            if (bis != null) {
                try {
                    bis.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (bos != null) {
                try {
                    bos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}


可以参考http://www.blogjava.net/max/archive/2007/03/21/105124.html