- FileUpload拦截器
- fileUpload拦截器的参数
- fileUpload拦截器的示例
fileUpload拦截器会自动处理包含文件的所有请求。
我们可以使用此拦截器来控制struts2中文件上传的工作, 例如定义允许的类型, 最大文件大小等。
文件上传拦截器的参数
为文件上传拦截器定义了2个参数。
Parameter | Description |
---|---|
maximumSize | 指定要上传的文件的最大大小。 |
allowedTypes | 指定允许的类型。可能是image / png, image / jpg等。 |
自动添加参数
它会在请求中自动添加2个参数:
- 字符串fileName表示文件的文件名。
- 字符串contentType指定文件的内容类型。
fileName和contentType名称取决于文件的请求参数。如果filename是file, 则需要使用fileFileName和fileContentType。如果filename是userImage, 则需要在Action类中使用userImageFileName和userImageContentType。
使用Struts 2的图片上传示例
让我们看看文件上传应用程序的目录结构。
1)创建UserImage.jsp
该jsp页面使用struts UI标记创建表单。它从用户那里接收文件。
index.jsp
<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
<title>Upload User Image</title>
</head>
<body>
<h2>
Struts2 File Upload & Save Example without Database
</h2>
<s:actionerror />
<s:form action="userImage" method="post" enctype="multipart/form-data">
<s:file name="userImage" label="Image" />
<s:submit value="Upload" align="center" />
</s:form>
</body>
</html>
2)创建SuccessUserImage.jsp
该jsp页面使用struts UI标记创建表单。它从用户那里接收名称, 密码和电子邮件ID。
SuccessUserImage.jsp
<%@ page contentType="text/html; charset=UTF-8"%><%@ taglib prefix="s"
uri="/struts-tags"%>
<html>
<head>
<title>Success: Upload User Image</title>
</head>
<body>
<h2>
Struts2 File Upload Example
</h2>
User Image: <s:property value="userImage" /><br/>
Content Type:<s:property value="userImageContentType" /><br/>
File Name: <s:property value="userImageFileName" /><br/>
Uploaded Image: <img src="userimages/<s:property value="userImageFileName"/>"
width="100" height="100" />
</body>
</html>
3)创建动作类
该操作类继承了ActionSupport类, 并覆盖了execute方法。
RegisterAction.java
package com.srcmini;
import java.io.File;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.io.FileUtils;
import com.opensymphony.xwork2.ActionSupport;
public class FileUploadAction extends ActionSupport{
private File userImage;
private String userImageContentType;
private String userImageFileName;
public String execute() {
try {
String filePath = ServletActionContext.getServletContext().getRealPath("/").concat("userimages");
System.out.println("Image Location:" + filePath);//see the server console for actual location
File fileToCreate = new File(filePath, userImageFileName);
FileUtils.copyFile(userImage, fileToCreate);//copying source file to new file
return SUCCESS;
}
public File getUserImage() {
return userImage;
}
public void setUserImage(File userImage) {
this.userImage = userImage;
}
public String getUserImageContentType() {
return userImageContentType;
}
public void setUserImageContentType(String userImageContentType) {
this.userImageContentType = userImageContentType;
}
public String getUserImageFileName() {
return userImageFileName;
}
public void setUserImageFileName(String userImageFileName) {
this.userImageFileName = userImageFileName;
}
}
4)创建struts.xml
该xml文件通过名称输入和拦截器jsonValidatorWorkflowStack定义了一个额外的结果。
struts.xml
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="fileUploadPackage" extends="struts-default">
<action name="userImage" class="com.srcmini.FileUploadAction">
<interceptor-ref name="fileUpload">
<param name="maximumSize">2097152</param>
<param name="allowedTypes">
image/png, image/gif, image/jpeg, image/pjpeg
</param>
</interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
<result name="success">SuccessUserImage.jsp</result>
<result name="input">UserImage.jsp</result>
</action>
</package>
</struts>
下载这个在Eclipse IDE中开发的示例(无jar)
评论前必须登录!
注册