struts2的文件上传机制

Struts2的上传(基本流程例如以下)

1、Struts2默认採用了apache commons-fileupload

2、Struts2支持三种类型的上传组件

3、须要引入commons-fileupload相关依赖包

* commons-io-1.3.2.jar

* commons-fileupload-1.2.1.jar

4、表单中须要採用POST提交方式,编码类型须要使用:multipart/form-data

5、Struts2的Action

取得文件名->>规则:输入域的名称+固定字符串FileName

取得文件数据->>规则:File 输入域的名称

取得内容类型->>规则:输入域的名称+固定字符串ContentType

6、得到输入流。採用输出流写文件

①.首先导入对应的jar包。然后我们建立一个index.jsp页面。

<%@ page language="java" contentType="text/html; charset=GB18030"
    pageEncoding="GB18030"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<title>Insert title here</title>
</head>
<body>
	<form action="upload.action" method="post" enctype="multipart/form-data"> 

                标题:<input type="text" name="title"><br>
		文件:<input type="file" name="myFile"><br>
		<input type="submit" value="上传">
	</form>
</body>
</html>

②然后我们须要一个Action来处理上传,代码例如以下:

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;

import com.opensymphony.xwork2.Action;

public class UploadTestAction {

	private String title;

	//能够得到上传文件的名称
	//规则:输入域的名称+固定字符串FileName
	private String myFileFileName;

	//取得文件数据
	//规则:File 输入域的名称
	private File myFile; 

//	//取得内容类型
//	//规则:输入域的名称+固定字符串ContentType
	private String myFileContentType;

	public String getMyFileFileName() {
		return myFileFileName;
	}

	public void setMyFileFileName(String myFileFileName) {
		this.myFileFileName = myFileFileName;
	}

	public String getTitle() {
		return title;
	}

	public void setTitle(String title) {
		this.title = title;
	}

	public File getMyFile() {
		return myFile;
	}

	public void setMyFile(File myFile) {
		this.myFile = myFile;
	}

	public String getMyFileContentType() {
		return myFileContentType;
	}

	public void setMyFileContentType(String myFileContentType) {
		this.myFileContentType = myFileContentType;
	}

	public String execute() throws Exception {
		InputStream is = null;
		OutputStream os = null;
		try {
			is = new BufferedInputStream(
					new FileInputStream(myFile));
			os = new BufferedOutputStream(
					new FileOutputStream("D:\\" + myFileFileName));
			byte[] buffer = new byte[1024];
			int len = 0;
			while ((len = is.read(buffer)) > 0) {
				os.write(buffer, 0, len);
			}
		}finally {
			if (is != null) {is.close();}
			if (os != null) {os.close();}
		}
		return Action.SUCCESS;
	}
}

③Action写完以后再到struts2的配置文件配置一下代码例如以下:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
	<!-- 当struts.xml配置文件发生改动。会立马载入。在生产环境下最好不要配置 -->
	<constant name="struts.configuration.xml.reload" value="true"/>              
        <constant name="struts.multipart.saveDir" value="绝对路径"></constant>
	<!-- 会提供更加友好的提示信息 -->
	<constant name="struts.devMode" value="true"/>
	<!-- 须要继承struts-default包,这样就拥有的最主要的功能 -->
	<package name="upload-package" extends="struts-default">
		<action name="upload" class="com.csu.struts2.UploadTestAction">
			<result>/success.jsp</result>
		</action>
	</package>
</struts>

OK!至此就能够上传文件了。

时间: 2024-08-11 13:54:34

struts2的文件上传机制的相关文章

struts2实现文件上传和下载

在做B/S系统时,通常会涉及到上传文件和下载文件,在没接struts2框架之前,我们都是使用apache下面的commons子项目的FileUpload组件来进行文件的上传,但是那样做的话,代码看起来比较繁琐,而且不灵活,在学习了struts2后,struts2为文件上传下载提供了更好的实现机制,在这里我分别就单文件上传和多文件上传的源代码进行一下讲解,这里需要导入文件下载上传的两个jar文件,一个是commons-fileupload-1.2.2.jar,另一个是commons-io-2.0.

Struts2单文件上传原理及示例

一.文件上传的原理 表单元素的enctype属性指定的是表单数据的编码方式,该属性有3个值: 1.application/x-www-form-urlencoded:这是默认编码方式,它只处理表单域里的value属性值,采用这种编码方式的表单会将表单域的值处理成URL编码方式. 2.multipart/form-data:这种编码方式的表单会以二进制流的方式来处理表单数据,这种编码方式会把文件域指定文件的内容也封装到请求参数里. 3.text/plain:这种方式主要适用于直接通过表单发送邮件的

关于Struts2单文件上传

要实现Struts2框架的文件上传,需要用到2个jar包 commons-fileupload-1.2.2.jar commons-io-2.0.1.jar 由于文件解析Struts2内部已经帮我们做好了,大大降低了开发难度,我们只需要在Action里设置好对应的参数,目录进行使用即可. 来个小示例: upload.jsp 这个页面的表单有三点需要注意的: 1.表单必须使用post方式提交 2.表单编码类型 enctype="multipart/form-data"   3.<s

Django文件上传机制用法详解(转)

Django文件上传机制用法详解 http://www.jbxue.com/article/24283.html 分享下Django文件上传机制的用法,包括基本上传文件的原理,以及如何处理上传文件的方法,需要的朋友参考下. 当Django处理上传一个文件时,文件数据被放在request.FILES中. 这个文档解释文件怎么样被存储在磁盘上或者内存中,怎样定制默认的行为. 一,基本文件上传考虑一个包含FileField的简单的表单: 复制代码 代码示例: from  django  import 

struts2的文件上传

struts2的文件上传,布布扣,bubuko.com

Struts2实现文件上传报错(四)

1.具体错误如下 2014-5-2 21:38:29 com.opensymphony.xwork2.util.logging.jdk.JdkLogger error 严重: Exception occurred during processing request: null java.lang.NullPointerException at com.you.file.upload.action.FileUploadAction.execute(FileUploadAction.java:56)

Struts2实现文件上传报错(一)

1.具体报错如下 2014-5-1 23:02:38 org.apache.catalina.core.StandardWrapperValve invoke 严重: Servlet.service() for servlet [jsp] in context with path [/UploadFile] threw exception [An exception occurred processing JSP page /file.jsp at line 28 25: <table> 26

Struts2实现文件上传报错(二)

编译Lua时,出现这样的错误: gcc -O2 -Wall -DLUA_COMPAT_ALL -DLUA_USE_LINUX -c -o lua.o lua.clua.c:67:31: error: 查阅了一下,centOS上需要安装readline-devel ncurses-devel yum install readline-devel ncurses-devel 测试平台成功. [[email protected] lua-5.2.3]# make linux test cd src &

Struts2实现文件上传报错(三)

1.具体错误如下 usage: java org.apache.catalina.startup.Catalina [ -config {pathname} ] [ -nonaming ] { -help | start | stop } 2014-5-1 23:17:23 org.apache.catalina.core.AprLifecycleListener init 信息: Loaded APR based Apache Tomcat Native library 1.1.27 usin