jsp页面代码

<form  action ="${ctx}/order/upload.action" method="post" enctype="multipart/form-data">
 <s:file name="upload"  label="上传"/>
 或者
 <input name="upload" type="file">
  <button>提交</button>
 </form>


服务后台代码:

需要两个jar包一个是commons-fileupload.jar,另一个是commons-io.jar


//注意,file并不是指前端jsp上传过来的文件本身,而是文件上传过来存放在临时文件夹下面的文件

    private File upload;//上传的文件内容的对象与表单中的name属性一致
     
    private String uploadContentType;//Struts2约定的代表上传文件的内容类型(MIME)
    private String uploadFileName;//Struts2约定的代表上传的文件的名
    省略了get,set方法
    
       //文件上传方法
    public String upload(){
        //服务端存放上传文件目录
        String destPath = ServletActionContext.getServletContext().getRealPath("/upload");
        System.out.println(destPath);
        File file=new File(destPath);
        if(!file.exists()) file.mkdirs();
        System.out.println(file);
        try {
            FileUtils.copyFile(upload, new File(file,uploadFileName));
        } catch (IOException e) {
            e.printStackTrace();
            return ERROR;
        }
        
        return SUCCESS;
                
    }


strut配置

<action name="upload" class="orderAction" method="upload" >
<result name="success">/WEB-INF/pages/order/orderdetail.jsp</result>
</action>

上传后的文件保存在tomcat安装路径/webapps/应用名称/upload文件夹下

我的机器为

D:\Program Files\apache-tomcat-7.0.62\webapps\admin\upload





Struts 2是通过Commons FileUpload文件上传。
Commons FileUpload通过将HTTP的数据保存到临时文件夹,然后Struts使用fileUpload拦截器将文件绑定到Action的实例中。从而我们就能够以本地文件方式的操作浏览器上传的文件


再添加<constant name="struts.multipart.maxSize" value ="10240000" />,Struts2的文件上传功能默认最大只能上传2M大小。这句重新指定了上传文件的最大限制,单位是字节。以这句为例,上传文件不能超过 10240000字节。注意,不能写成1024*1000*10这种形式。


在<package>标签之外添加<constant name="struts.multipart.saveDir" value ="/temp"/>,这句指定了上传文件的临时存放目录,以这句为例,临时存放目录为应用所在根目录下的temp文件夹,假设我的应用放在D:\Program Files\apache-tomcat-6.0.24\webapps下,那么临时存放目录就是D:\temp。也可以指定一个绝对路径。目录不存在也没关系,会自动创建。

struct 配置文件上传拦截器

</action>
        <!-- 上传 -->
        <action name="upload"
            class="com.erentc.Web.Action.hp.UploadeAction">
            <!-- 指定系统提供的上传文件过滤的拦截器 -->
            <interceptor-ref name="fileUpload">
                <param name="allowedTypes">
                    p_w_picpath/gif,p_w_picpath/pjpeg,p_w_picpath/x-png,p_w_picpath/jpg
                </param><!-- 允许上传的文件类型 -->
                <param name="maximumSize">900000</param><!-- 允许上传的文件大小 -->
            </interceptor-ref>
            <!-- 引用系统默认拦截器 -->
            <interceptor-ref name="defaultStack" />
            <!-- 通过param 元素注入savePath属性 -->
            <param name="savePath">/GoodsPic/upload</param><!-- 配置上传的路径 -->
            <result name="input">/uplode.jsp</result><!--发生错误时候 跳转的页面 -->
            <result name="success">/succ.jsp</result>
        </action>




the request was rejected because its size (3020812) exceeds the configured maximum (2097152)