struts2 文件上传笔记

本文详细介绍使用Struts2框架进行文件上传的具体步骤,包括配置文件上传拦截器、设置允许上传的文件类型、大小限制及扩展名等。同时提供了一个实际的文件保存示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

struts2官方的文件上传教程

 

http://struts.apache.org/2.2.1.1/docs/file-upload.html

 

http://struts.apache.org/2.2.1.1/docs/file-upload-interceptor.html


教程附带了类型拦截器,用来过滤上传的文件.但只有基本的一些信息,下面我会把其它没写到的补上或做个说明.

尽量保证文件上传的流程中,request不会被别的程序提前处理.不然struts可能找不到要处理的上传文件.

UploadAction 扩展自 com.opensymphony.xwork2.ActionSupport;可以直接用来处理文件上传.所以没必要再去研究 commons-fileupload 的上传,不过研究下也没坏处.

JSP:注意这里的 name="upload" 这个 upload 是我们以后在action里要写的 set 方法的关键字.
<s:form action="doUpload" method="post" enctype="multipart/form-data">
    <s:file name="upload" label="File"/>
    <s:submit/>
</s:form>

UploadAction 中有3个成员变量
private File file; //上传的文件
private String contentType; //上传的文件类型
private String filename; //上传的文件名
public void setUpload(File file)
public void setUploadContentType(String contentType)
public void setUploadFileName(String filename)

网上有些教程是按
[File Name]
[File Name]ContentType
[File Name]FileName
这种格式写这3个成员变量.假设 [File Name] = abc,那么下面的 2 个变量就是 abcContentType 和 abcFileName ,然后给这3个成员变量写 set 方法 ,JSP的<s:file name="abc" label="File"/>. 注意 [File Name] 尽量不写成 upload .可能会导致 空指针 的错误.


下面是我自己的保存文件代码.保存路径: 根目录的/uploadFiles/日期/文件名
public String execute() {
    String date = new SimpleDateFormat("yyyyMMdd").format(new Date());
    String serverPath = ServletActionContext.getServletContext().getRealPath("//");
    try {
        String fullFileName = serverPath+"uploadFiles//"+date+"//"+filename;
        System.out.println(fullFileName);
        if(filename!=null)FileUtils.copyFile(file, new File(fullFileName)); 
    } catch (Exception e) {
        e.printStackTrace();
    }
    return SUCCESS;
}

拦截器:
struts.xml里这么写就可以过滤非 image/png,image/gif,image/jpeg 指定的文件.
<action name="doUpload" class="com.example.UploadAction">

    <interceptor-ref name="fileUpload">
        <param name="allowedTypes">image/png,image/gif,image/jpeg</param>
    </interceptor-ref>

    <interceptor-ref name="defaultStack"></interceptor-ref>
    <result name="success">good_result.jsp</result>
</action>

因为这个拦截器是官方提供的.所以我们只需要写拦截器的参考名 interceptor-ref name="fileUpload" 而不需要特别指定这个 fileUpload 是谁.

除了 allowedTypes 类型拦截外,还有另外2个属性:
maximumSize : 最大上传限制,单位是 bytes .默认是最大能上传 2 M 的文件(1024*1024*2)
allowedExtensions : 扩展名限制,和 allowedTypes 是差不多的,只是不再写 image/png 而是改成 .png
allowedExtensions 和 allowedTypes 要限制多个,中间用逗号"," 隔开

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值