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

Struts2文件上传的简单示例

2013-08-20 14:03 357 查看
1. 新建一个Struts2应用,注意要将commons-fileupload-1.3.jar和commons-io-2.0.1.jar这两个jar包复制到WEB-INF\lib目录下。

2. 简单的文件上传页面index.jsp:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>文件上传</title>
</head>
<body>
<!-- 必须将表单的 method设置为post,enctype设置为multipart/form-data,
浏览器才会把用户选择的文件的二进制数据发送给服务器 -->
<s:form action="uploadAction" method="post"
enctype="multipart/form-data">
<s:textfield name="title" label="文件标题"/><br/>
<!-- 文件域 -->
<s:file name="upload" label="选择文件"/><br/>
<s:submit value="上传"/>
</s:form>
</body>
</html>


3. 用于处理文件上传的UploadAction:

package com.huey.action;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;

/**
* UploadAction,用户处理文件上传
* @version 2013-08-20
* @author Huey2672
*
*/
public class UploadAction extends ActionSupport {

/**
*
*/
private static final long serialVersionUID = 5288901795536794634L;

private String title;
// upload封装了表单中的文件域,其类型为java.io.File
private File upload;
// uploadFileName封装了文件upload的文件名
private String uploadFileName;
// uploadContentType封装了文件upload的文件类型
private String uploadContentType;
// savePath属性通过配置文件struts.xml设置
private String savePath;

public String getTitle() {
return title;
}

public void setTitle(String title) {
this.title = title;
}

public File getUpload() {
return upload;
}

public void setUpload(File upload) {
this.upload = upload;
}

public String getUploadFileName() {
return uploadFileName;
}

public void setUploadFileName(String uploadFileName) {
this.uploadFileName = uploadFileName;
}

public String getUploadContentType() {
return uploadContentType;
}

public void setUploadContentType(String uploadContentType) {
this.uploadContentType = uploadContentType;
}

/**
* 获取上传文件的保存路径
* @return
* @throws Exception
*/
public String getSavePath() throws Exception {
return ServletActionContext.getServletContext()
.getRealPath("/WEB-INF/" + savePath);
}

public void setSavePath(String savePath) {
this.savePath = savePath;
}

@Override
public String execute() throws Exception {
// 以服务器上传文件的保存目录和文件名创建输出流
FileOutputStream fos = new FileOutputStream(getSavePath() +
"\\" + getUploadFileName());
// 以上传的文件创建输入流
FileInputStream fis = new FileInputStream(getUpload());

byte[] buffer = new byte[1024];
int len = 0;
while ((len = fis.read(buffer)) > 0) {
fos.write(buffer, 0, len);
}

// 关闭输入输出流
fis.close();
fos.close();

return SUCCESS;
}
}


4. 配置struts.xml文件,配置了国际化资源,实现文件过滤的拦截器还有UploadAction:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>

<constant name="struts.custom.i18n.resources" value="msg"/>
<!-- 指定Struts2文件上传过程中的临时文件夹 -->
<constant name="struts.multipart.saveDir" value="D:\\apache-tomcat-6.0.36\\webapps\\UploadingDemo\\WEB-INF\\upload\\tmp"/>

<package name="loadup" extends="struts-default">
<action name="uploadAction" class="com.huey.action.UploadAction">
<!-- 通过fileUpload拦截器实现文件过滤,
当文件过滤失败后,系统将转如input逻辑视图 -->
<interceptor-ref name="fileUpload">
<!-- 配置允许上传的文件类型 -->
<param name="allowedTypes">image/png,image/gif,image/jpeg,image/jpg</param>
<!-- 配置允许上传的文件大小,单位是字节 -->
<param name="maximumSize">2048</param>
</interceptor-ref>
<!-- 还必须显示配置Struts默认的拦截器,且fileUpload配置在前 -->
<interceptor-ref name="defaultStack"/>
<param name="savePath">/upload</param>
<result name="success">success.jsp</result>
<result name="input">index.jsp</result>
</action>
</package>

</struts>


5. 当文件过滤失败后,跳转回index.jsp视图后,Struts2的标签会自动显示上传失败的提示信息,但是提示的英文信息,上传文件类型不允许和上传文件太大的提示信息的key分别是struts.messages.error.content.type.not.allowed和struts.messages.error.file.too.large,可以在自己的国际化资源文件中增加该key的消息,以改变提示信息。国际化资源文件msg_zh_CN.properties(需要要native2ascii工具处理):

struts.messages.error.content.type.not.allowed=只能上传图片!请重新选择!
struts.messages.error.file.too.large=上传的文件太大,请重新选择!


6. 文件上传成功的视图success.jsp:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>上传成功</title>
</head>
<body>
上传成功!
</body>
</html>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: