Struts2的文件上传
将表单的method属性设置为post,将enctype设置为multipart/form-data。
将enctype设置为multippart/form-data,浏览器将采用二进制流方式处理表单数据。
Struts2的文件上传默认使用jakarta的commons-fileupload文件上传框架,
依赖commons-fileupload-1.2.1.jar、commons-io-1.3.2.jar
①.# struts.multipart.parser=cos
②.# struts.multipart.parser=pell
③.struts.multipart.parser=jakarta
实现文件上传的Action
需求:输入标题,浏览文件,上传
若表单中文件域的name属性为xxx,则Action需要三个属性来封装该文件域信息
①.类型为File的xxx属性封装了该文件域对应的文件内容
②.类型为String的xxxFileName属性封装了该文件域对应的文件名
③.类型为String的xxxContentType属性封装了该文件域对应的文件类型
编写处理上传请求的Action类
①.private String title;
②.private File upload;
③.private String uploadContentType;
④.private String uploadFileName;
⑤.private String savePath;
Action属性的值可以通过Struts2配置文件注入,即在配置文件中为属性指定值
①.ServletActionConext.getServletContext().getRealPath(savePath);
execute: FileUtils.copy(uploadImage,new File(folder,uploadImageFileName));
配置文件上传的Action
为Action指定<param name="savaPath">/images</param>
<img src="<s:property value="'images/'+ uploadFileName"/>"/>
UploadAction.java:
upload.jsp:
succ.jsp:
上述代码实现了一个基本的上传功能
将表单的method属性设置为post,将enctype设置为multipart/form-data。
将enctype设置为multippart/form-data,浏览器将采用二进制流方式处理表单数据。
Struts2的文件上传默认使用jakarta的commons-fileupload文件上传框架,
依赖commons-fileupload-1.2.1.jar、commons-io-1.3.2.jar
①.# struts.multipart.parser=cos
②.# struts.multipart.parser=pell
③.struts.multipart.parser=jakarta
实现文件上传的Action
需求:输入标题,浏览文件,上传
若表单中文件域的name属性为xxx,则Action需要三个属性来封装该文件域信息
①.类型为File的xxx属性封装了该文件域对应的文件内容
②.类型为String的xxxFileName属性封装了该文件域对应的文件名
③.类型为String的xxxContentType属性封装了该文件域对应的文件类型
编写处理上传请求的Action类
①.private String title;
②.private File upload;
③.private String uploadContentType;
④.private String uploadFileName;
⑤.private String savePath;
Action属性的值可以通过Struts2配置文件注入,即在配置文件中为属性指定值
①.ServletActionConext.getServletContext().getRealPath(savePath);
execute: FileUtils.copy(uploadImage,new File(folder,uploadImageFileName));
配置文件上传的Action
为Action指定<param name="savaPath">/images</param>
<img src="<s:property value="'images/'+ uploadFileName"/>"/>
用java.util.UUID工具类生产唯一的文件名
上传实例:
struts.xml:
<?xml version="1.0" encoding="GBK" ?>
<!--指定struts2配置文件的DTD信息-->
<!DOCTYPE struts PUBLIC
"-//apache Software Foundation//DTD Struts Configuation 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<!-- struts 是struts2配置文件的根元素-->
<struts>
<constant name="struts.devMode" value="true"></constant>
<constant name="struts.i18n.encoding" value="UTF-8"></constant>
<!--允许静态方法的执行-->
<constant name="struts.ognl.allowStaticMethodAccess" value="true"></constant>
<package name="test" namespace="/" extends="struts-default">
<action name="uploadPro" class="cn.edu.hpu.action.UploadAction">
<!-- 动态设置action的属性值 -->
<param name="savePath">/upload</param>
<!-- 配置Struts 2默认的视图页面 -->
<result>/content/succ.jsp</result>
</action>
<action name="*">
<result>/content/{1}.jsp</result>
</action>
</package>
</struts>
UploadAction.java:
package cn.edu.hpu.action;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class UploadAction extends ActionSupport {
//封装文件标题请求的参数
private String title;
//封装上传文件域的属性
private File upload;
//封装上传文件类型的属性
private String uploadContenttype;
//封装上传文件名的属性
private String uploadFileName;
//直接在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 getUploadContenttype() {
return uploadContenttype;
}
public void setUploadContenttype(String uploadContenttype) {
this.uploadContenttype = uploadContenttype;
}
public String getUploadFileName() {
return uploadFileName;
}
public void setUploadFileName(String uploadFileName) {
this.uploadFileName = uploadFileName;
}
//返回上传文件的保存地址
public String getSavePath() throws Exception{
return ServletActionContext.getServletContext().getRealPath(savePath);
}
public void setSavePath(String savePath) {
this.savePath = savePath;
}
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);
}
return SUCCESS;
}
}
upload.jsp:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<%@taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>upload</title>
</head>
<body>
<s:form action="uploadPro" enctype="multipart/form-data">
<s:textfield name="title" label="文件标题"/><br/>
<s:file name="upload" label="选择文件"/><br/>
<s:submit value="上传"></s:submit>
</s:form>
</body>
</html>
succ.jsp:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<%@taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>upload success</title>
</head>
<body>
上传成功!<br/>
文件标题:<s:property value=" + title"/><br/>
文件为:<img src="<s:property value="'upload/'+uploadFileName"/>"/><br/>
</body>
</html>
上述代码实现了一个基本的上传功能
注意:
在struts.xml中配置action,然后注入初始值param,,里面有允许上传的类型。
在action类中,用get、set方法得到允许上传的类型(一般是个字符串数组),之后与上传文件的类型比较,如果有一样的,放行,如果没有,说明上传类型非法,将错误信息放在FieldError里面,类似:addFieldError("upload","上传的类型不正确!");。在Jsp文件里以<s:fielderror/>显示错误提示
转载请注明出处:http://blog.csdn.net/acmman/article/details/47251619