SSH框架之Struts的文件上传

一、未接触Struts时的文件上传:通过Struts提交的文件上传组件来上传文件。
前台:
1、提交方式POST
2、表单类型 multipart/form-data
3、input type=file

后台:Apache提供的FileUpload组件
核心类:
1、FileItemFactory:FileItem的工厂
2、ServletFileUpload:serlvet中文件上传的核心类
3、FileItem:封装了上传的表单文件项的信息

总之,文件上传,处理起来比较麻烦!!!

二、Struts的文件上传:
1、实现:文件上传的拦截器帮助我们完成了文件上传的功能。

 <interceptor 
        name="fileUpload" class="org.apache.struts2.interceptor.FileUploadInterceptor"/>

并且该拦截器同时存在于struts-defautl中的defaultStack中,所以是默认实现的。

2、实现文件上传的代码:
1)项目的目录结构:

2)jsp页面部分:

3)FileUploadAction.java

package sram.fileupload;

import java.io.File;

import org.apache.commons.io.FileUtils;
import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;

public class FileUploadAction extends ActionSupport{

    //对应表单:<input type="file" name="file1">
    private File file1;
    //文件名    **FileName固定写法
    private String file1FileName;
    //文件类型(MIME)    **ContentType固定写法
    //Tomcat目录下的conf/web.xml中对类型是定义好的
    private  String file1ContentType;

    public void setFile1(File file1) {
        this.file1 = file1;
    }
    public void setFile1FileName(String file1FileName) {
        this.file1FileName = file1FileName;
    }
    public void setFile1ContentType(String file1ContentType) {
        this.file1ContentType = file1ContentType;
    }

    public String execute() throws Exception {
        //拿到上传的文件,进行处理
        System.out.println("FileUpload.execute()");
        /**
         * 把文件上传到upload目录
         */
        //获取上传的目录的路径
        String path = ServletActionContext.getServletContext().getRealPath("/upload");
        //创建目标文件对象
        File destFile = new File(path,file1FileName);
        //把上传的文件,拷贝到目标文件中
        FileUtils.copyFile(file1, destFile);

        return SUCCESS;
    }
}

3、文件上传细节处理
1)文件大小限制
Struts默认支持的文件上传最大是2M
通过常量修改:修改default.properties中的struts.multipart.maxSize=2097152

2)限制上传文件的允许的类型
需求:只允许txt/jpg后缀的文件
解决办法:拦截器注入参数从而限制文件上传类型

3)错误提示:
当文件上传出现错误的时候,struts内部会返回input视图(错误视图),所以就需要我们在struts.xml中配置input视图对应的错误页面!

4)struts.xml配置

<package name="fileupload" namespace="/" extends="struts-default">
        <!-- name值不能写成fileUpload,原因:Struts内部使用该名称,为关键字 -->
        <action name="fileUploadAction" class="sram.fileupload.FileUploadAction">

            <!-- 限制允许上传的文件的类型 -->
            <interceptor-ref name="defaultStack">

                <!-- 限制允许的文件的扩展名【推荐使用】 -->
                <param name="fileUpload.allowedExtensions">txt,jpg,jar</param>
                <!-- 限制允许的类型【一般不与上面的同时是使用。如果同时使用,取交集!!】
                <param name="fileUpload.allowedTypes">text/plain</param>
                 -->

            </interceptor-ref>

            <result name="success">/fileupload/success.jsp</result>

            <!-- 配置错误视图 -->
            <result name="input">/fileupload/error.jsp</result>
        </action>
</package>
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值