【Struts2实现文件上传】struts2上传文件异常总结及解决方式

版权声明:转载请注明出处:http://blog.csdn.net/u010143291 https://blog.csdn.net/u010143291/article/details/51810517

实现文件上传工程坏境搭建如下:

Struts2相关jar包:


1.在web.xml配置核心过滤器

<!-- 配置struts2的核心过滤器 -->
  <filter>
  	<filter-name>struts2</filter-name>
  	<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
  </filter>
  <filter-mapping>
  	<filter-name>struts2</filter-name>
  	<url-pattern>/*</url-pattern><!-- 映射的路径 -->
  </filter-mapping>

2.在src目录下新建struts.xml文件内容如下:

<span style="font-size:12px;"><!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
	"http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>
	<package name="action" namespace="/" extends="struts-default">
		<action name="upload" class="cn.lsh.web.struts2.upload.UploadAction" method="execute">
			<result name="success" type="dispatcher">/WEB-INF/jsp/message.jsp</result>
			
		<!-- 
			<interceptor-ref name="fileUpload">
				向fielUpload拦截器注入参数 
			允许上传的文件大小,这里是设置为5M(如果超过5M则会包异常)
			<param name="maximumSize">1024*1024*5</param>
			 
				设置文件扩展名
			<param name="allowedExtensions">.jpg/.txt</param>
			
				设置文件类型
			<param name="allowedTypes">image/jpeg/jpg/txt</param>
			</interceptor-ref>
		-->
		</action>		
	</package>
	<!-- 配置上传文件临时保存目录,如果没有配置则会报:提示该 struts.multipart.saveDir属性未设置异常</span><span style="font-family: Arial, Helvetica, sans-serif;">--></span><span style="font-size:12px;">
	<constant name="struts.multipart.saveDir" value="/upload"/>
</struts></span>
3,新建UploadAtcion继承ActionSupport类(默认重载validate()和execute()方法)


public class UploadAction extends ActionSupport {
	private String username;
	
	//以下三个属性,fileUpload拦截器自动闯入
	private File upload;//上传文件
	private String uploadContentType;//上传文件类型
	private String uploadFileName;//上传文件名
	
	public void setUsername(String username) {
		this.username = username;
	}
	public void setUpload(File upload) {
		this.upload = upload;
	}
	public void setUploadContentType(String uploadContentType) {
		this.uploadContentType = uploadContentType;
	}
	public void setUploadFileName(String uploadFileName) {
		this.uploadFileName = uploadFileName;
	}
	
	//默认验证成功
	@Override
	public void validate() {
		super.validate();
	}
	
	//上传业务控制方法
	public String execute() throws Exception {
		System.out.println("上传文件中。。。。");
	
		//指定上传文件的临时保存目录位置
		String path = ServletActionContext.getServletContext().getRealPath("/WEB-INF/upload");
		InputStream in = new FileInputStream(this.upload);
		OutputStream out = new FileOutputStream(path+"\\"+this.uploadFileName);
		
		int len = 0;
		byte[] by = new byte[1024];
		while((len=in.read(by))>0){
			out.write(by,0,len);
		}
		in.close();
		out.close();
		return "success";
		
	}
}

4,新建一个upload.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>
  <!-- enctype="multipart/form-data:指定对上传表单项进行URL编码 -->
    <form action="${pageContext.request.contextPath }/upload.action" method="post" enctype="multipart/form-data">
    	<table align="center" border="1">
    			<caption><h2>上传</h2></caption>
    			<tr>
    				<td>上传用户名:</td>
    				<td><input type="text" name="username"/></td>
    			</tr><tr>
    				<td>上传文件:</td>
    				<td><input type="file" name="upload"/></td>
    			</tr>
    			<tr align="center">
    				<td colspan="2"><input type="submit" value="上传"/></td>
    			</tr>
    	</table>
    </form>
  </body>
</html>

测试:在浏览器中输入http://localhost:8080/struts3/upload.jsp
访问页面如下:


上传文件报错异常,测试坏境中出现如下异常:

2016-7-2 12:15:39 com.opensymphony.xwork2.util.logging.jdk.JdkLogger info
信息: Unable to find 'struts.multipart.saveDir' property setting. Defaulting to javax.servlet.context.tempdir
上传文件中。。。。

报错分析:提示该 struts.multipart.saveDir属性未设置。

上述信息告诉我们,struts.multipart.saveDir没有配置。
struts.multipart.saveDir用于指定存放临时文件的文件夹,该配置写在struts.properties文件或者struts.xml配置文件中。例如,如果是struts.properties文件,则加入如下代码:struts.multipart.saveDir = /tmp/;或者是struts.xml配置文件,则增加如下代码:<constant name="struts.multipart.saveDir" value="/tmp"/>,设置临时文件上传路径。就能解决此问题。

解决方式一(可在struts.xml文件中配置j加入如下属性):

<constant name="struts.multipart.saveDir" value="/upload"/>

解决方式二(可在struts.proerties文件中配置如下属性):

struts.multipart.saveDir=/upload

解决方式三(可在web.xml文件中把<url-pattern>/*</url-pattern>配置成<url-pattern>*.action</url-pattern>

测试三种配置方式:查看上传文件临时保存目录,E:\apache-tomcat-6.0.39\webapps\struts3\WEB-INF\upload,文件上传成功(完美解决异常)!

阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页