首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 其他相关 >

Struts2 下传和上载文件(二)

2012-11-09 
Struts2 上传和下载文件(二)二、 Struts 2 的文件上传?Struts 2 并未提供自己的请求解析器,它需要调用其他

Struts2 上传和下载文件(二)


二、 Struts 2 的文件上传


?Struts 2 并未提供自己的请求解析器,它需要调用其他上传框架来解析二进制请求数据。但 Struts 2 在原有的上传解析器基础上做了进一步封装,简化了文件上传

?


2.1 Struts 2的文件上传支持

?

在 Struts 2 的 struts.properties 配置文件中,可以看到上传文件解析器

UploadAction.java

?

xxx, xxxFileName ,xxxContentType,这个3个属性,可以更简单地实现文件上传。

?

savePath 属性,通过配置文件来设置,从而允许动态设置该属性值(依赖注入)

?

提示:Struts 2 的 Action 中的属性,功能非常丰富,除了可以用于封装 HTTP 请求参数外,也可以封装 Action 的处理结果。不仅如此,Action 属性还可以通过在 Struts 2 配置文件中进行配置,接收 Struts 2 框架的注入,允许在配置文件中为该属性动态指定值。

?

?

2.3 配置文件上传的 Action

?

struts.xml

?

?

以上2段代码与 2.2 中一起使用

?

?

2.4 手动实现文件过滤

?

限制浏览者自由上传各种文件,或限制上传文件大小等等,可以使用文件过滤

?

手动实现文件过滤的步骤:

在 Action 中定义一个专门用于进行文件过滤的方法,方法名是任意的,该方法的逻辑就是判断上传文件的类型是否为允许的类型,如下 filterType() 方法

?

?

?

为了让文件上传类型校验失败时能返回 input 逻辑视图,在 struts.xml 中加入 input :

?

错误提示 <span style="color:red">${requestScope.typeError}</span>

?

?

提示: 如果需要实现文件大小过滤,可以调用 File 类 的 length() 方法来获取上传文件大小。除此之外,Struts 2 的 struts.multipart.maxSize 常量也用于限制允许上传的文件大小,这个常量对于整个 Struts 2 应用都会起作用

?

?

?

?

2.5 拦截器实现文件过滤

?

Struts 2 提供一个文件上传的拦截器,通过配置拦截器可以更轻松实现文件过滤。Struts 2 中文件上传的过滤器是 fileUpload 为了让该拦截器起作用,只需要在该 Action 中配置该拦截器引用即可。

?

配置 fileUpload 拦截器时,可以指定 2 个参数:

?

??? ● allowedTypes : 指定允许上传的文件类型,多个文件类型之间用英文逗号(,)隔开

  ● maximumSize : 指定允许上传的文件大小,单位是字节

?

通过配置 fileUpload 拦截器,可以轻松地实现文件过滤,过滤失败后,自动转入 input 逻辑视图

在 Action 配置 input,还有 defaultStack 的拦截器引用

?

struts.xml

?

??

上面的代码将会把文件过滤失败的信息显示在该页面上,给用户重新上传生成提示。

?

国际化

?

默认是英文提示,需要国际化

● 上传文件太大的提示信息的 key 是 "struts.messages.error.file.too.large" , 如果在自己的国际化资源文件中增加该 key 的消息,将可改变该提示信息。

● 不允许上传的文件类型的提示信息的 key 是 "struts.messages.error.content.type.not.allowed" 的信息;如果在自己国际化资源文件中增加该 key 的消息,将可改变文件类型不允许的提示信息

●? 文件上传的未知错误的key 为 "struts.messages.error.uploading" 的信息,如果用户上传文件失败,既不是文件类型不允许,也不是文件大小超出允许大小,则系统将提示页面输出该 key 的消息

?

globalMessages.properties

?

?

?

?

2.7 文件上传的常量配置

?

当每次上传文件时,都可以在 Tomcat 的控制台看见如下信息:

?

struts.xml

?

除此之外,我们还应该将 Pell 的核心 JAR 包复制过来,multipartrequest.jar

?

至于文件上传的 Action ,配置 Action , 过滤文件类型等,与使用 Common-FileUpload 进行文件上传完全相同

?

热点排行