个性化阅读
专注于IT技术分析

Struts 2实现文件上传示例图解

  1. FileUpload拦截器
  2. fileUpload拦截器的参数
  3. fileUpload拦截器的示例

fileUpload拦截器会自动处理包含文件的所有请求。

我们可以使用此拦截器来控制struts2中文件上传的工作, 例如定义允许的类型, 最大文件大小等。

文件上传拦截器的参数

为文件上传拦截器定义了2个参数。

Parameter Description
maximumSize 指定要上传的文件的最大大小。
allowedTypes 指定允许的类型。可能是image / png, image / jpg等。

自动添加参数

它会在请求中自动添加2个参数:

  1. 字符串fileName表示文件的文件名。
  2. 字符串contentType指定文件的内容类型。

fileName和contentType名称取决于文件的请求参数。如果filename是file, 则需要使用fileFileName和fileContentType。如果filename是userImage, 则需要在Action类中使用userImageFileName和userImageContentType。


使用Struts 2的图片上传示例

让我们看看文件上传应用程序的目录结构。

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)


输出

struts文件上传示例1
struts 2文件上传示例2

图像将不会显示在当前项目中。访问服务器控制台中打印的图像位置以查看图像。

赞(0)
未经允许不得转载:srcmini » Struts 2实现文件上传示例图解

评论 抢沙发

评论前必须登录!