您的位置:首页 > 编程语言 > Java开发

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>

最终的项目的目录结构如下:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: