FileUpload解析

本文介绍了Struts2框架中的文件上传实现原理及配置方法。通过使用CommonsFileUpload组件,Struts2能够轻松地处理文件上传任务。文章详细解释了如何配置fileUpload拦截器、设置上传文件类型和大小限制等。

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

实现原理

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

fileUpload拦截器必须在defaultStack(默认)拦截器前面配置,Struts2会由上到下执行拦截器。

<!--配置fileUpload的拦截器-->

<interceptor-refname="fileUpload">

<!--配置允许上传的文件类型-->
<paramname="allowedTypes">image/bmp,image/png,image/gif,image/jpeg
</param>
</interceptor-ref>
<interceptor-refname="defaultStack"/>

allowedTypes指定上传的文件类型,但类型不符只会在控制台输出警告语句,程序不会报错。

maximumSize指定上传的单个文件大小,但文件超出大小只会在控制台输出警告语句,程序不会报错。注意不能写成1024*1024*5的形式。

 

struts.xml里进行以下设置:

<constant name="struts.i18n.encoding" value="GBK"/>国际化资源文件编码 

<constant name="struts.multipart.saveDir"  val ="/temp"/>,这句指定了上传文件的临时存放目录

<constant name="struts.multipart.maxSize"  val ="10240000"/>,Struts2的文件上传功能默认最大只能上传2M大小。这句重新指定了上传文件的总大小的最大限制,单位是字节。

 

//相关部分代码

页面文件中,将表单的提交方式设为POST,然后将enctype设为multipart/form-data

 

public class FileUploadAction extends ActionSupport
int BUFFER_SIZE = 1024*32;
File imageFile=newFile(ServletActionContext.getServletContext().getRealPath("/UploadImages")+"/"+imageFileName);
copy(myFile, imageFile);//或使用IOUtils.copy(in, out);
try{
   InputStreamin=null;
   OutputStream out=null;
    try{             
       in=newBufferedInputStream(newFileInputStream(src), BUFFER_SIZE);
       out=newBufferedOutputStream(newFileOutputStream(dst), BUFFER_SIZE);
       byte[]buffer=newbyte[BUFFER_SIZE];
       while(in.read(buffer)>0){
          out.write(buffer);
        }
    }finally{
       if(null!=in){
          in.close();
        }
        if(null!=out){
          out.close();
        }
    }
 }catch(Exception e){
   e.printStackTrace();
 }

对应的国际化资源文件
大多数情况下,我们都需要自定义和国际化这些信息。
通过在全局的国际资源文件中加入
“struts.messages.error.content.type.not.allowed=The file you uploaded is not a image” //文件类型
“struts.messages.error.file.too.large= too large " //上传文件的大小
“struts.messages.error.uploading=”//用提示一般的上传出错信息。

allowedExtensionsSet这是设置允许上传文件的后缀,多个类型以逗号“,”隔开,如果某个文件的后缀没在这个设置之类,则会产生一个错 误保存到Action中,错误的i18n的的key为 struts.messages.error.file.extension.not.allowed

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值