Struts2上传文件拦截器实现文件上传

Struts2预置了大量的拦截器,见struts-default.xml第122行。


有一部分拦截器是Struts2框架自身用到的,必须引用,这些拦截器打包在basicStack中,我们项目中引用的拦截器,不能少于basicStack中注册的拦截器。有一部分拦截器是最常用的,它们被打包在defaultStack中,该拦截器栈是Struts2默认引用的,我们不需要在Action中做任何处理,就相当于引用了这个拦截器栈。


注意:一旦我们在action配置下引用了任何拦截器,那么默认引用的拦截器就失效了,所以不要丢弃默认拦截器的引用。


下面的例子就是使用这个默认拦截器里面带的fileUpload拦截器所实现的功能。


首先导入下图所示jar包:


Struts2上传文件拦截器实现文件上传_第1张图片


编写Action代码如下:


public class FileUpload {

	/** 接收拦截器传入的临时文件 **/
	private File material;

	/** 接收拦截器注入的原始文件名,这个名字命名的规则是:  File类型属性+FileName **/
	private String materialFileName;

	public String getMaterialFileName() {
		return materialFileName;
	}

	public void setMaterialFileName(String materialFileName) {
		this.materialFileName = materialFileName;
	}

	public File getMaterial() {
		return material;
	}

	public void setMaterial(File material) {
		this.material = material;
	}

	public String upload() {
		//打印一下源文件的名称,验证是否得到了上传时文件的名称
		System.out.println(materialFileName);
		//构建一个路径
		String path = "/WEB-INF/upload/" + UUID.randomUUID();
		//通过构建的路径得到一个在操作系统的真实路径
		path = ServletActionContext.getServletContext().getRealPath(path);
		//把一个文件复制到指定的目录,FileUtil这个工具类源码在群(102992282)文件下载
		FileUtil.copy(material, new File(path));
		ServletActionContext.getRequest().setAttribute("message", "success");
		return "message";
	}
}

在struts.xml中配置这个Action,代码如下:


<!--
		struts上传文件最大值默认限制为2097152B,就是2M
		如果想更改这个值可在struts.xml中配置如下 代码:
		<constant name="struts.multipart.maxSize" value="" />
	 -->
	<package name="material" namespace="/material" extends="struts-default">
		<action name="uploadUI">
			<result name="success">
				/WEB-INF/page/upload.jsp
			</result>
		</action>
		
		<action name="upload" class="hxl.insist.FileUpload" method="upload">
			<result name="message">
				/WEB-INF/page/message.jsp
			</result>
		</action>
	</package>

由于默认拦截器被默认引用,这里将不用手动添加进去了。


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>
    <form action="upload" method="post" enctype="multipart/form-data">
    	<input type="file" name="material"/>
    	<input type="submit" value="commit" />
    </form>
  </body>
</html>

注意:这里面input元素的name属性要与Action中的字段要一致。

你可能感兴趣的:(文件上传,struts2,拦截器)