struts2 多文件上传
2016-05-14 12:28
405 查看
6). 一次传多个文件怎么办 ? private File doc; private String docContentType ; private String docFileName; 若传递多个文件, 则上述的 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 - 文件扩展名不合法的消息 问题: 此种方式定制的消息并不完善. 可以参考 struts2-core-2.3.28.jar 下的 org.apache.struts2 下的 struts-messages.properties, 可以提供更多的定制信息.
解决6 和7 中的问题?
为了实现多文件上传,我们需要在简易版 文件上传UpdateFile(Struts2版)的基础上 ,修改 Update.java
和 TestUpdateAction.java ,upload.jsp即可
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~分割线~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
修改后的 Update.java
package com.baidu.update; import java.io.File; import java.util.List; public class Update { private List<File> doc; private List<String> docContentType ; private List<String> docFileName; private List<String> docDesc; public List<File> getDoc() { return doc; } public void setDoc(List<File> doc) { this.doc = doc; } public List<String> getDocContentType() { return docContentType; } public void setDocContentType(List<String> docContentType) { this.docContentType = docContentType; } public List<String> getDocFileName() { return docFileName; } public void setDocFileName(List<String> docFileName) { this.docFileName = docFileName; } public List<String> getDocDesc() { return docDesc; } public void setDocDesc(List<String> docDesc) { this.docDesc = docDesc; } @Override public String toString() { return "Update [doc=" + doc + ", docContentType=" + docContentType + ", docFileName=" + docFileName + ", docDesc=" + docDesc + "]"; } }修改后的Action:TestUpdateAction.java
package com.baidu.update; import java.io.File; import java.util.List; public class Update { private List<File> doc; private List<String> docContentType ; private List<String> docFileName; private List<String> docDesc; public List<File> getDoc() { return doc; } public void setDoc(List<File> doc) { this.doc = doc; } public List<String> getDocContentType() { return docContentType; } public void setDocContentType(List<String> docContentType) { this.docContentType = docContentType; } public List<String> getDocFileName() { return docFileName; } public void setDocFileName(List<String> docFileName) { this.docFileName = docFileName; } public List<String> getDocDesc() { return docDesc; } public void setDocDesc(List<String> docDesc) { this.docDesc = docDesc; } @Override public String toString() { return "Update [doc=" + doc + ", docContentType=" + docContentType + ", docFileName=" + docFileName + ", docDesc=" + docDesc + "]"; } }
修改后的 upload.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="s" uri="/struts-tags" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <s:debug></s:debug> <s:form action="tesupdate" method="post" enctype="multipart/form-data"> <s:file name="doc" label="DocFile1"></s:file> <s:textfield name="docDesc[0]" label="Desc1"></s:textfield> <s:file name="doc" label="DocFile2"></s:file> <s:textfield name="docDesc[1]" label="Desc2"></s:textfield> <s:file name="doc" label="DocFile3"></s:file> <s:textfield name="docDesc[2]" label="Desc3"></s:textfield> <s:submit></s:submit> </s:form> </body> </html>
仅需要在简易版文件上传的基础上修改这三个文件就可以完成多文件的上传,但是还不完美,我们还可以通过修改struts.xml
配置来实现对上传文件的限制
修改后的[b]struts.xml[/b]
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <!-- 配置全局的国际化资源文件 --> <constant name="struts.custom.i18n.resources" value="nihao"></constant> <!-- 修改默认配置总的上传文件的最大值 maxSize--> <constant name="struts.multipart.maxSize" value="10485760"></constant> <package name="default" namespace="/" extends="struts-default"> <interceptors> <interceptor-stack name="baidu"> <interceptor-ref name="defaultStack"> <!-- maximumSize:配置单个上传文件的最大值 allowedTypes: 配置允许上传文件的类型 allowedExtensions:配置允许上传文件的扩展名 文件类型和文件的扩展名对照表 详见http://download.csdn.net/detail/chuck_kui/9519873 --> <param name="fileUpload.maximumSize">2097152</param> <param name="fileUpload.allowedTypes">text/html,application/vnd.ms-powerpoint,text/doc,image/png</param> <param name="fileUpload.allowedExtensions">html,doc,txt,png</param> <param name=""></param> </interceptor-ref> </interceptor-stack> </interceptors> <default-interceptor-ref name="baidu"/> <action name="tesupdate" class="com.baidu.update.TestUpdateAction"> <result>/upload.jsp</result> <result name="input">/upload.jsp</result> </action> </package> </struts>
相关文章推荐
- Running Dubbo On Spring Boot
- spring通知-BeforeAdvice和AfterReturningAdvice
- eclipse + pydev 创建django项目
- Spring Boot 中使用log4jdbc记录SQL的运行时参数
- (3)使用IntelliJ IDEA建立maven项目
- java 字符串编码转换(注意:编码转换不一定是完全可逆的,可能存在数据丢失情况)
- 小代码 java字符统计
- the environment variable java_home does not point to a valid JVM installation.
- JAVA-基本数据类型与引用数据类型区别
- java中克隆研究
- JAVA-封装
- 35-001-4 Struts中的表单数据输入的验证问题
- JAVA构造方法
- mybatis一级缓存(session cache)引发的问题
- java实现并查集
- java.lang.IllegalStateException的解决方向
- Spring中的AOP面向切面编程
- Java String.split()用法小结
- 加快eclipse
- Java对象的克隆