利用Struts拦截器限制上传图片的格式和大小
2017-02-06 14:51
183 查看
在这之前
Struts的一个核心功能就是大量的拦截器,既然是框架,那么自然也就贴心地为我们准备好了各种常用的功能,比如这里即将讨论的如何限制上传图片的格式和大小。那么既然是使用Struts已经写好的拦截器,不需要我们去自定义了,那么这个拦截器的基本配置如何进行?在哪里进行配置?以上,要弄懂基本原理的话,就要先了解Struts运行的大致流程。
Struts的运行大致流程
核心运行流程:Struts的启动是依靠 StrutsPrepareAndExecuteFilter 过滤器来完成,当过滤器启动时会执行其 init() 方法,它会去读取Struts的配置信息,并将其封装到JavaBean中,然后执行过滤器的 doFilter() 来解析地址,实例化Action并根据result进行页面的跳转。在Action的执行前后,会执行各类功能不同的拦截器。
用一张图来说明以上的过程,就是:
很明显,init() 中读取的配置文件至关重要,这里有几个核心文件被读取,分别是 default.properties、struts-default.xml、struts-plugin.xml、struts.xml,并且按顺序读取,同样的变量和配置项,后读取的配置文件会覆盖已读取的配置文件。这也就是即使前几个文件是Struts配置好的我们没法改变,我们也依然可以通过在struts.xml中进行相关变量的配置来进行最终实现上的改变。
default.properties 中,定义了Struts中大量的常量,也就是许多设置的默认值。
而拦截器这部分的配置信息,在 struts-default.xml 中,它在 struts2-core-x.x.x 核心包的根目录下,它不仅包含了大量bean的定义,还有大量的拦截器、拦截器栈,同时还定义了11种不同类型的页面跳转方式(result-type)等等。(这也就是我们的Action在配置时候总要extends struts-default.xml 的原因)
在struts-default.xml中,默认使用的是 defaultStack 这个拦截器栈,其中包含了一系列的拦截器(如下图)
可以看到,fileUpload拦截器正是默认拦截器栈的一员,而我们,就要从这里入手,来实现我们对上传图片的限制功能。
如何使用拦截器限制上传图片
我们先来看看源码,在之前已经说过,fileUpload这个拦截器是我们默认拦截器栈中的一员,我们同样在default-struts.xml中来找到该拦截器:打开Struts文件上传的拦截器org.apache.struts2.interceptor.FileUploadInterceptor,发现其包含三个重要属性
它们分别表示的是:上传文件的最大长度(单位为字节)(在default.properties我们可以查到struts.multipart.maxSize=2097152,即默认最大为2M大小的文件)
允许上传文件的类型
允许上传文件的文件扩展名。
而之前我们提到的,这些默认的配置可以在struts.xml中将其默认值覆盖,所以我们如果要限制上传为jpg、png类型的最大为1M的图片,那么:
(图例为使用限制文件扩展名的方式)
以上,叨叨了这么多,其实也就这么简单的几排,就完成了我们想要的功能。另外,还要提醒的是,虽然如此配置让struts帮我们完成了对文件上传的限制,但是假如我们上传了不符合条件的文件,会发生什么?
答案是,系统会报错,并使Action自动直接返回 “input” ,所以不需要在action中的方法出现一个 return "input",同时,我们还要对返回的result name=“input” 进行配置,以便于即使上传了不符的文件,页面也能正常跳转:
(图例让其跳转到mainAction中执行 input() 方法)
也可以参考如下方式:
至此,我们就对Struts拦截器完成图片上传限制的功能进行了了解和使用。
参考链接和源码
参考链接struts2--上传总结(限制大小和类型 非法上传的跳转)用文件上传了解struts2拦截器的使用
Struts2文件上传
源码地址源码地址Github
功能实现前,commit id:11e893eea4baea2683d6083368c758a3afe1a0bf
功能实现后,commit id:2a6127d1d50eeeb98fa64e19b8d4321f9d61b360
附:struts.xml概述和配置文件的思维导图
相关文章推荐
- js上传文件(图片)限制格式及大小
- 限制上传图片大小,格式为jpg 或者 png
- 使用Struts实现文件上传,格式限制,大小限制
- js 限制图片上传的格式与大小
- js 异步上传图片 限制图片的格式大小
- JS实现点击某张图片弹出上传图片窗口以及限制图片格式和大小
- 实名认证,上传图片的问题,只能上传图片格式,并且还有限制大小
- 上传图片限制大小和格式
- 在ASP.NET MVC下实现单个图片上传, 客户端服务端双重限制图片大小和格式, 服务端裁剪图片
- JS类 检测上传图片的大小,宽,高及格式检查
- 如何用struts上传文件,并限制文件扩展名和文件大小.
- 图片上传之前检查大小、尺寸、格式并预览的js代码
- 图片上传之前检查大小、尺寸、格式并预览
- Javascript实现上传前对图片大小、格式的检查并预览
- 一个自己写的真正判断文件格式,文件大小,而并不仅仅从扩展名来进行判断的上传方法,进一步加强防止软件或恶意的木马图片上传
- JS 判断 图片上传_限制格式、类型、尺寸
- [转]前台JS限制上传图片质量大小和尺寸!
- javascript验证图片上传的格式和大小
- ASP.NET上传图片,服务器端验证,宽度,高度,文件类型,尺寸,文件大小,图片上传,图片格式检查
- JS类 检测上传图片的大小,宽,高及格式检查