struts2_文件上传

1. 文件上传
 正常情况下,文件操作我们是利用fileupload组件进行操作的。文件上传有以下几个要求:

        浏览器端:
            1.method=post
            2.<input type="file" name="xx">
            3.encType="multipart/form-data";

        服务器端:
            commons-fileupload组件
            1.DiskFileItemFactory
            2.ServletFileUpload
            3.FileItem

2. struts2中的文件上传
 默认情况下,struts2框架用的是commons-fileupload组件。
struts2是利用一个拦截器帮助我们完成文件上传操作的。这个拦截器就是:<interceptor name="fileUpload" class="org.apache.struts2.interceptor.FileUploadInterceptor"/>

3.在action中如何处理文件上传问题?

//页面上的组件
<input type="file" name="upload">

//在action中要有三个属性
private File upload;//要和上传组件的名称一样
private String uploadContentType;//上传组件名称+ContentType
private String uploadFileName;//上传组件名称+FileName

//最后在action的execute方法中使用commons-io包下的FileUtils完成文件复制
FileUtils.copyFile(upload, new File("d:/upload",uploadFileName));

4. 控制文件上传大小
 在default.properties文件中定义了文件总上传大小。
struts.multipart.maxSize=2097152,上传文件总大小默认为2M。
在struts.xml配置文件进行更改值。

<struts>
    <!--在这边被我改成20M-->
    <constant name="struts.multipart.maxSize" value="20971520"></constant>
</struts>

5. 文件上传工具

//在struts2中默认使用的是commons-fileupload进行文件上传。
//如果使用pell,cos进行文件上传,必须导入其jar包。
# struts.multipart.parser=cos
# struts.multipart.parser=pell
struts.multipart.parser=jakarta

6. 错误信息修改
 在上述情况中,如果发生错误,我们必须配置input视图,用页面上通过<s:actionerror>展示错误信息,但是错误信息全都是英文的,如果想要展示中文,怎么修改?

struts-messages.properties 文件里预定义 上传错误信息,通过覆盖对应key 显示中文信息
struts.messages.error.uploading=Error uploading: {0}
struts.messages.error.file.too.large=The file is to large to be uploaded: {0} "{1}" "{2}" {3}
struts.messages.error.content.type.not.allowed=Content-Type not allowed: {0} "{1}" "{2}" {3}
struts.messages.error.file.extension.not.allowed=File extension not allowed: {0} "{1}" "{2}" {3}

修改为:
struts.messages.error.uploading=上传错误: {0}
struts.messages.error.file.too.large=上传文件太大: {0} "{1}" "{2}" {3}
struts.messages.error.content.type.not.allowed=上传文件的类型不允许: {0} "{1}" "{2}" {3}
struts.messages.error.file.extension.not.allowed=上传文件的后缀名不允许: {0} "{1}" "{2}" {3}

{0}:<input type=“file” name=“uploadImage”>中name属性的值
{1}:上传文件的真实名称
{2}:上传文件保存到临时目录的名称
{3}:上传文件的类型(对struts.messages.error.file.too.large是上传文件的大小)

7. 多文件上传
 在服务器端只需要将action属性声明成List集合就行了。

//拿上面的例子进行更改
private List<File> upload;
private List<String> uploadContentType;
private List<String> uploadFileName;
//在下面进行操作的时候应该用for循环对每一个进行操作

8. 怎样控制每一个上传文件大小以及上传文件类型?
 在fileupload的拦截器中,通过其属性对其进行控制。

maximumSize---每一个上传文件大小
allowedTypes--允许上传文件的mimeType类型.
allowedExtensions--允许上传文件的后缀名.

//在struts.xml的action标签下配置子标签,例如设置允许上传的后缀为txt,MP3,doc格式
<interceptor-ref name="defaultStack">
    <param name="fileUpload.allowedExtensions">txt,mp3,doc</param>
</interceptor-ref>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值