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>