struts2实现文件上传(配置拦截器)
2014-08-28 21:50
417 查看
http://blog.sina.com.cn/s/blog_77cb8363010177zb.html
知识点:
配置fileUpload拦截器时,可为其指定2个参数:
allowedTypes :该参数指定允许上传的文件类型,多文件之间用英文(,)隔开;
maximumSize :该参数指定允许上传的文件大小,单位是字节;
通过配置fileUpload拦截器,可以轻松的实现文件过滤,当文件过滤失败后,系统自动转入input逻辑视图。
因此必须为该Action配置名为input的逻辑视图,除此之外,还必须显示的为该Action配置defaultStack的拦截
器引用;
表单元素的enctype属性
application/x-www-form-urlencoded :这是默认编码方式,它只处理表单里的value属性值,
采用这种编码方式的表单会将表单域的值处理成URL编码方式。
multipart/form-data : 这种编码方式会以二进制流的方式来处理表单数据,这种编码方式
会把文件域指定文件内容页封装到请求参数里。
text/plain :这种编码方式当表单的action属性为mailto:URL 的形式时比较方便,这种方式
主要适用于直接通过表单发送邮件的方式。
使用拦截器fileUpload为struts2内建的拦截器,作用在于限制文件类型和文件大小,
将文件写入到指定的目录的code还是需要自己实现。
第一步:struts.xml配置:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<!-- 指定国际化资源文件的baseName为uploadFile-->
<constant name="struts.custom.i18n.resources" value="uploadFile"></constant>
<!-- 设置该应用使用的编码集为utf-8 -->
<constant name="struts.i18n.encoding" value="utf-8"></constant>
<package name="default" namespace="/" extends="struts-default" >
<!-- 连接进入上传页面 -->
<action name="uploadFile">
<result>/WEB-INF/jsp/upload.jsp</result>
</action>
<!-- 显示上传结果页面 -->
<action name="upload" class="org.struts.Upload" method="uploadFile">
<!-- 配置名字为fileUpload的拦截器 -->
<interceptor-ref name="fileUpload">
<!-- 配置允许上传的文件类型 -->
<param name="allowedTypes">image/bmp,image/png,image/gif,
image/jpeg,image/pjpeg,image/x-png</param>
<!-- 配置允许上传文件的大小(单位字节) -->
<param name="maximumSize">80000</param>
</interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
<!-- 动态设置保存文件的路径 (Action的属性值)-->
<param
name="savePath">/upload</param>
<!-- 配置struts2的默认视图 -->
<result>/WEB-INF/jsp/show.jsp</result>
<!-- 配置struts2的逻辑input视图 -->
<result name="input">/WEB-INF/jsp/upload.jsp</result>
</action>
</package>
</struts>
第二步:国际化资源文件uploadFile.properties配置:
第三步:web.xml配置:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<display-name></display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<!-- 配置Struts2 框架的核心Filter-->
<filter>
<!-- 配置Struts2核心Filter的名字-->
<filter-name>struts2</filter-name>
<!-- 配置Struts2核心Filter的实现类-->
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
<!-- 配置Struts2核心FilterDispatcher拦截所有用户请求-->
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
第四步:Action配置Upload.java:
package org.struts;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class Upload extends ActionSupport{
private String savePath; // 封装保存文件的路径目录
private String title; // 封装上传文件的标题
private File upload; // 封装上传文件的内容
private String uploadContentType; // 封装上传文件类型
private String uploadFileName; // 封装上传文件名
public String getSavePath() {
return ServletActionContext.getRequest().getRealPath(savePath);
}
public String getTitle() {
return title;
}
public File getUpload() {
return upload;
}
public String getUploadContentType() {
return uploadContentType;
}
public String getUploadFileName() {
return uploadFileName;
}
public void setSavePath(String savePath) {
this.savePath = savePath;
}
public void setTitle(String title) {
this.title = title;
}
public void setUpload(File upload) {
this.upload = upload;
}
public void setUploadContentType(String uploadContentType) {
this.uploadContentType = uploadContentType;
}
public void setUploadFileName(String uploadFileName) {
this.uploadFileName = uploadFileName;
}
public String uploadFile () throws Exception{
//保存文件的地址
FileOutputStream fos = new FileOutputStream(getSavePath()+"\\"+uploadFileName);
//获得上传文件流
FileInputStream fis = new FileInputStream(upload);
//将文件写入服务器
byte[] buffer = new byte[1024];
int len=0;
while((len=fis.read(buffer))>0){
fos.write(buffer,0,len);
}
return SUCCESS;
}
}
第五步:上传页面代码:
<body>
<s:form action="upload.action" method="post"enctype="multipart/form-data" namespace="/">
<s:textfield label="文件描述" name="title"></s:textfield>
<s:file label="文件" name="upload"></s:file>
<s:submit value="上传"></s:submit>
</s:form>
</body>
第六步:显示页面代码:
<body>
文件名:<s:property value="title"/><br/>
文件:<img src="<s:property value="'upload/'+uploadFileName"/>"/>
</body>
最终的项目的目录结构如下:
知识点:
配置fileUpload拦截器时,可为其指定2个参数:
allowedTypes :该参数指定允许上传的文件类型,多文件之间用英文(,)隔开;
maximumSize :该参数指定允许上传的文件大小,单位是字节;
通过配置fileUpload拦截器,可以轻松的实现文件过滤,当文件过滤失败后,系统自动转入input逻辑视图。
因此必须为该Action配置名为input的逻辑视图,除此之外,还必须显示的为该Action配置defaultStack的拦截
器引用;
表单元素的enctype属性
application/x-www-form-urlencoded :这是默认编码方式,它只处理表单里的value属性值,
采用这种编码方式的表单会将表单域的值处理成URL编码方式。
multipart/form-data : 这种编码方式会以二进制流的方式来处理表单数据,这种编码方式
会把文件域指定文件内容页封装到请求参数里。
text/plain :这种编码方式当表单的action属性为mailto:URL 的形式时比较方便,这种方式
主要适用于直接通过表单发送邮件的方式。
使用拦截器fileUpload为struts2内建的拦截器,作用在于限制文件类型和文件大小,
将文件写入到指定的目录的code还是需要自己实现。
第一步:struts.xml配置:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<!-- 指定国际化资源文件的baseName为uploadFile-->
<constant name="struts.custom.i18n.resources" value="uploadFile"></constant>
<!-- 设置该应用使用的编码集为utf-8 -->
<constant name="struts.i18n.encoding" value="utf-8"></constant>
<package name="default" namespace="/" extends="struts-default" >
<!-- 连接进入上传页面 -->
<action name="uploadFile">
<result>/WEB-INF/jsp/upload.jsp</result>
</action>
<!-- 显示上传结果页面 -->
<action name="upload" class="org.struts.Upload" method="uploadFile">
<!-- 配置名字为fileUpload的拦截器 -->
<interceptor-ref name="fileUpload">
<!-- 配置允许上传的文件类型 -->
<param name="allowedTypes">image/bmp,image/png,image/gif,
image/jpeg,image/pjpeg,image/x-png</param>
<!-- 配置允许上传文件的大小(单位字节) -->
<param name="maximumSize">80000</param>
</interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
<!-- 动态设置保存文件的路径 (Action的属性值)-->
<param
name="savePath">/upload</param>
<!-- 配置struts2的默认视图 -->
<result>/WEB-INF/jsp/show.jsp</result>
<!-- 配置struts2的逻辑input视图 -->
<result name="input">/WEB-INF/jsp/upload.jsp</result>
</action>
</package>
</struts>
第二步:国际化资源文件uploadFile.properties配置:
第三步:web.xml配置:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<display-name></display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<!-- 配置Struts2 框架的核心Filter-->
<filter>
<!-- 配置Struts2核心Filter的名字-->
<filter-name>struts2</filter-name>
<!-- 配置Struts2核心Filter的实现类-->
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
<!-- 配置Struts2核心FilterDispatcher拦截所有用户请求-->
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
第四步:Action配置Upload.java:
package org.struts;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class Upload extends ActionSupport{
private String savePath; // 封装保存文件的路径目录
private String title; // 封装上传文件的标题
private File upload; // 封装上传文件的内容
private String uploadContentType; // 封装上传文件类型
private String uploadFileName; // 封装上传文件名
public String getSavePath() {
return ServletActionContext.getRequest().getRealPath(savePath);
}
public String getTitle() {
return title;
}
public File getUpload() {
return upload;
}
public String getUploadContentType() {
return uploadContentType;
}
public String getUploadFileName() {
return uploadFileName;
}
public void setSavePath(String savePath) {
this.savePath = savePath;
}
public void setTitle(String title) {
this.title = title;
}
public void setUpload(File upload) {
this.upload = upload;
}
public void setUploadContentType(String uploadContentType) {
this.uploadContentType = uploadContentType;
}
public void setUploadFileName(String uploadFileName) {
this.uploadFileName = uploadFileName;
}
public String uploadFile () throws Exception{
//保存文件的地址
FileOutputStream fos = new FileOutputStream(getSavePath()+"\\"+uploadFileName);
//获得上传文件流
FileInputStream fis = new FileInputStream(upload);
//将文件写入服务器
byte[] buffer = new byte[1024];
int len=0;
while((len=fis.read(buffer))>0){
fos.write(buffer,0,len);
}
return SUCCESS;
}
}
第五步:上传页面代码:
<body>
<s:form action="upload.action" method="post"enctype="multipart/form-data" namespace="/">
<s:textfield label="文件描述" name="title"></s:textfield>
<s:file label="文件" name="upload"></s:file>
<s:submit value="上传"></s:submit>
</s:form>
</body>
第六步:显示页面代码:
<body>
文件名:<s:property value="title"/><br/>
文件:<img src="<s:property value="'upload/'+uploadFileName"/>"/>
</body>
最终的项目的目录结构如下:
相关文章推荐
- struts2 文件上传 拦截器的错误配置导致的问题
- Struts2上传文件拦截器实现文件上传
- struts2基于注解且使用拦截器的文件上传配置
- Struts2的文件上传及使用拦截器实现文件过滤
- struts2的文件上传(3):利用拦截器实现文件过滤
- Struts2文件上传在配置fileUpload拦截器中设置文件大小无效的问题
- Struts2实现文件上传(默认拦截器篇)
- struts2使用fileUpload拦截器实现文件上传
- struts2实现文件上传(类型、大小过滤——手动、拦截器)
- 4.3.5: Struts2文件上传---拦截器实现文件过滤
- Struts2上传文件通过配置文件实现文件过滤
- Struts2国际化、拦截器配置以及使用struts上传文件
- Struts2配置文件、拦截器详解
- struts2 实现多文件限制上传
- 在struts2中用fileupload实现文件上传
- Struts2中使用Common-FileUpload实现文件上传
- 在Struts2中实现文件上传
- struts2——为Action配置Method属性,实现同一文件,多个Action
- Applet结合Struts2实现文件上传 推荐
- struts2 文件上传的拦截器问题