struts2之文件上传

 

表单的准备

 

要想使用 HTML 表单上传一个或多个文件

1. 须把 HTML 表单的 enctype 属性设置为 multipart/form-data

2. 须把 HTML 表单的method 属性设置为 post

3. 需添加 <input type=“file”> 字段. 

 

Struts 对文件上传的支持

 

在 Struts 应用程序里, FileUpload 拦截器和 Jakarta Commons FileUpload 组件可以完成文件的上传. 

步骤:

1. 在 Jsp 页面的文件上传表单里使用 file 标签. 如果需要一次上传多个文件, 就必须使用多个 file 标签, 但它们的名字必须是相同的

2. 在 Action 中新添加 3 个和文件上传相关的属性. 这 3 个属性的名字必须是以下格式

[File Name] : File -被上传的文件。例如:data

[File Name]ContentType : String -上传文件的文件类型。例如:dataContentType

[File Name]FileName : String -上传文件的文件名。例如:dataFileName

如果上上传多个文件, 可以使用 List

 

配置 FileUpload 拦截器

 

FileUpload 拦截器有 3 个属性可以设置.

maximumSize: 上传单个文件的最大长度(以字节为单位), 默认值为 2 MB

allowedTypes: 允许上传文件的类型, 各类型之间以逗号分隔

allowedExtensions: 允许上传文件扩展名, 各扩展名之间以逗号分隔

可以在 struts.xml 文件中覆盖这 3 个属性



  

Commons FileUpload 组件默认接受上传文件总的最大值为 2M, 可以通过在 struts 配置文件中配置常量的方式修改

与文件上传有关的出错消息在 struts-messages.properties 文件里预定义.  可以在文件上传 Action 相对应的资源文件中重新定义错误消息

 

小结

 

1. 文件的上传:

1). 表单需要注意的 3 点

2). Struts2 的文件上传实际上使用的是 Commons FileUpload 组件, 所以需要导入

commons-fileupload-1.3.jar

commons-io-2.0.1.jar

3). Struts2 进行文件上传需要使用 FileUpload 拦截器

4). 基本的文件的上传: 直接在 Action 中定义如下 3 个属性, 并提供对应的 getter 和 setter

//文件对应的 File 对象

private File [fileFieldName];

//文件类型

private String [fileFieldName]ContentType;

//文件名

private String [fileFieldName]FileName;

5). 使用 IO 流进行文件的上传即可. 

6). 一次传多个文件怎么办 ?

若传递多个文件, 则上述的 3 个属性, 可以改为 List 类型! 多个文件域的 name 属性值需要一致. 

7). 可以对上传的文件进行限制吗 ? 例如扩展名, 内容类型, 上传文件的大小 ? 若可以, 则若出错, 显示什么错误消息呢 ? 消息可以定制吗 ? 

可以的!

可以通过配置 FileUploadInterceptor 拦截器的参数的方式来进行限制

maximumSize (optional) - 默认的最大值为 2M. 上传的单个文件的最大值

allowedTypes (optional) - 允许的上传文件的类型. 多个使用 , 分割

allowedExtensions (optional) - 允许的上传文件的扩展名. 多个使用 , 分割.

注意: 在 org.apache.struts2 下的 default.properties 中有对上传的文件总的大小的限制. 可以使用常量的方式来修改该限制

struts.multipart.maxSize=2097152

定制错误消息. 可以在国际化资源文件中定义如下的消息:

struts.messages.error.uploading - 文件上传出错的消息

struts.messages.error.file.too.large - 文件超过最大值的消息

struts.messages.error.content.type.not.allowed - 文件内容类型不合法的消息

struts.messages.error.file.extension.not.allowed - 文件扩展名不合法的消息

问题: 此种方式定制的消息并不完善. 可以参考 org.apache.struts2 下的 struts-messages.properties, 可以提供更多的定制信息. 

 

 

 

猜你喜欢

转载自ihuning.iteye.com/blog/2235719