Struts2文件的上传
一、单文件的上传
表单的enctype属性:
application/x-www-form-urlencoded:默认的编码方式。
multipart/form-data:会以二进制的方式处理表单数据,会将文件域指定文件的内容也封装到请求参数里。
text/plain:当action属性是mailto:URL的形式方便。
常用的上传框架是Common-FileUpload和COS,默认是Common-FileUpload,一旦框架获得了文件域对应的文件内容,我们就可以通过IO流将文件内容写入服务器的任意位置,从而完成文件上传。
可以通过struts.properties配置文件中,修改默认值:struts.multipart.parser=jakarta
1、处理上传文件的jsp页面
upload.jsp
1: <%@ page language="java" contentType="text/html; charset=UTF-8"
2: pageEncoding="UTF-8"%>
3: <%@ page import="java.util.*" %>
4: <%@ taglib prefix="s" uri="/struts-tags" %>
5: <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
6: <html>
7: <%
8: String path = request.getContextPath();
9: String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
10: %>
11: <head>
12: <base href="<%=basePath%>">
13: <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
14: <title>Struts2文件上传</title>
15: </head>
16: <body>
17: <h1>Struts 2完成上传</h1>
18: <form action="upload.action" method="post" enctype="multipart/form-data">
19: <div style="color:red"><s:fielderror/> </div>
20: <table>
21: <tr>
22: <td>用户名:</td>
23: <td><input type="text" name="username" ></td>
24: </tr>
25: <tr>
26: <td>上传文件:</td>
27: <td><input type="file" name="myFile"></td>
28: </tr>
29: <tr>
30: <td><input type="submit" value="上传"></td>
31: <td><input type="reset"></td>
32: </tr>
33: </table>
34: </form>
35: </center>
36: </body>
37: </html>
2、UploadAction.java
1: package cc.openhome;
2: import java.io.File;
3: import java.io.FileInputStream;
4: import java.io.FileOutputStream;
5: import java.io.InputStream;
6: import java.io.OutputStream;
7: import org.apache.struts2.ServletActionContext;
8: import com.opensymphony.xwork2.ActionSupport;
9: public class UploadAction extends ActionSupport {
10: // username属性用来封装用户名
11: private String username;
12:
13: // myFile属性用来封装上传的文件
14: private File myFile;
15:
16: // myFileContentType属性用来封装上传文件的类型
17: private String myFileContentType;
18:
19: // myFileFileName属性用来封装上传文件的文件名
20: private String myFileFileName;
21:
22:
23: //获得username值
24: public String getUsername() {
25: return username;
26: }
27:
28: //设置username值
29: public void setUsername(String username) {
30: this.username = username;
31: }
32:
33: //获得myFile值
34: public File getMyFile() {
35: return myFile;
36: }
37:
38: //设置myFile值
39: public void setMyFile(File myFile) {
40: this.myFile = myFile;
41: }
42:
43: //获得myFileContentType值
44: public String getMyFileContentType() {
45: return myFileContentType;
46: }
47:
48: //设置myFileContentType值
49: public void setMyFileContentType(String myFileContentType) {
50: this.myFileContentType = myFileContentType;
51: }
52:
53: //获得myFileFileName值
54: public String getMyFileFileName() {
55: return myFileFileName;
56: }
57:
58: //设置myFileFileName值
59: public void setMyFileFileName(String myFileFileName) {
60: this.myFileFileName = myFileFileName;
61: }
62:
63: public String execute() throws Exception {
64:
65: //基于myFile创建一个文件输入流
66: InputStream is = new FileInputStream(myFile);
67:
68: // 设置上传文件目录
69: String uploadPath = ServletActionContext.getServletContext()
70: .getRealPath("/upload");
71:
72: // 设置目标文件
73: File toFile = new File(uploadPath, this.getMyFileFileName());
74:
75: // 创建一个输出流
76: OutputStream os = new FileOutputStream(toFile);
77:
78: //设置缓存
79: byte[] buffer = new byte[1024*1024];
80:
81: int length = 0;
82:
83: //读取myFile文件输出到toFile文件中
84: while ((length = is.read(buffer)) > 0) {
85: os.write(buffer, 0, length);
86: }
87: //关闭输入流
88: is.close();
89: //关闭输出流
90: os.close();
91: return SUCCESS;
92: }
93: }
94:
95:
3、配置struts.xml
1: <?xml version="1.0" encoding="UTF-8" ?>
2: <!DOCTYPE struts PUBLIC
3: "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
4: "http://struts.apache.org/dtds/struts-2.3.dtd">
5:
6: <struts>
7: <constant name="struts.custom.i18n.resources" value="messageResource"></constant>
8: <package name="openhome" extends="struts-default">
9: <action name="upload" class="cc.openhome.UploadAction">
10: <interceptor-ref name="fileUpload">
11: <param name="allowedTypes">image/bmp,image/png,image/gif,image/jpeg</param>
12: <param name="maximumSize">2000</param>
13: </interceptor-ref>
14: <interceptor-ref name="defaultStack" />
15: <result name="success">/WEB-INF/page/succ.jsp</result>
16: <result name="input">/upload.jsp</result>
17: </action>
18: </package>
19: <!-- Add packages here -->
20: </struts>
21:
4、succ.jsp
1: <%@ page language="java" contentType="text/html; charset=UTF-8"
2: pageEncoding="UTF-8"%>
3: <%@ taglib prefix="s" uri="/struts-tags" %>
4: <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
5: <html>
6: <head>
7: <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
8: <title>Insert title here</title>
9: </head>
10: <body>
11: 上传成功!<br>
12: 上传用户:${username}<br>
13: 文件标题:${ myFileFileName }<br>
14: 文件类型:${ myFileContentType }<br>
15: 文件为:<br><img src="<s:property value="'upload/'+myFileFileName"/>"/>
16: </body>
17: </html>
5、运行结果
此时,上传文件必须满足:大小小于2000kb,而且是图片文件。
二、多文件的上传
1、uploadmany.jsp
1: <%@ page language="java" contentType="text/html; charset=UTF-8"
2: pageEncoding="UTF-8"%>
3: <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
4: <html>
5: <head>
6: <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
7: <title>数组多文件上传</title>
8: </head>
9: <body>
10: <form action="upload.action" method="post" enctype="multipart/form-data">
11: 上传用户:<input type="text" name="username" /><br>
12: 选择第一个文件:<input type="file" name="myFile" /><br>
13: 选择第二个文件:<input type="file" name="myFile" /><br>
14: 选择第三个文件:<input type="file" name="myFile" /><br>
15: <input type="submit" value="上传">
16: <input type="reset">
17: </form>
18: </body>
19: </html>
2、UploadAction.jsp
1: package cc.openhome;
2:
3: import java.io.File;
4: import java.io.FileInputStream;
5: import java.io.FileOutputStream;
6: import java.io.InputStream;
7: import java.io.OutputStream;
8: import java.util.List;
9: import org.apache.struts2.ServletActionContext;
10: import com.opensymphony.xwork2.ActionSupport;
11: public class UploadAction extends ActionSupport {
12: // username属性用来封装用户名
13: private String username;
14:
15: // myFile属性用来封装上传的文件
16: //private File[] myFile;
17: private List<File> myFile;
18:
19: // myFileContentType属性用来封装上传文件的类型
20: private List<String> myFileContentType;
21:
22: // myFileFileName属性用来封装上传文件的文件名
23: private List<String> myFileFileName;
24:
25: //定义所有Action允许上传的类型
26: private String allowTypes;
27:
28: public String getAllowTypes() {
29: return allowTypes;
30: }
31:
32: public void setAllowTypes(String allowTypes) {
33: this.allowTypes = allowTypes;
34: }
35:
36: //获得username值
37: public String getUsername() {
38: return username;
39: }
40:
41: //设置username值
42: public void setUsername(String username) {
43: this.username = username;
44: }
45:
46: //获得myFile值
47: public List<File> getMyFile() {
48: return myFile;
49: }
50:
51: //设置myFile值
52: public void setMyFile(List<File> myFile) {
53: this.myFile = myFile;
54: }
55:
56: //获得myFileContentType值
57: public List<String> getMyFileContentType() {
58: return myFileContentType;
59: }
60:
61: //设置myFileContentType值
62: public void setMyFileContentType(List<String> myFileContentType) {
63: this.myFileContentType = myFileContentType;
64: }
65:
66: //获得myFileFileName值
67: public List<String> getMyFileFileName() {
68: return myFileFileName;
69: }
70:
71: //设置myFileFileName值
72: public void setMyFileFileName(List<String> myFileFileName) {
73: this.myFileFileName = myFileFileName;
74: }
75: public String execute() throws Exception {
76: List<File> files=getMyFile();
77: for(int i=0;i<files.size();i++){
78: //基于myFile创建一个文件输入流
79: InputStream is = new FileInputStream(files.get(i));
80:
81: // 设置上传文件目录
82: String uploadPath = ServletActionContext.getServletContext()
83: .getRealPath("/upload");
84: // 设置目标文件
85: //File[] toFile = new File(uploadPath, this.getMyFileFileName());
86: File toFile = new File(uploadPath, this.getMyFileFileName().get(i));
87: // 创建一个输出流
88: OutputStream os = new FileOutputStream(toFile);
89:
90: //设置缓存
91: byte[] buffer = new byte[1024*1024];
92:
93: int length = 0;
94:
95: //读取myFile文件输出到toFile文件中
96: while ((length = is.read(buffer)) > 0) {
97: os.write(buffer, 0, length);
98: }
99: //关闭输入流
100: is.close();
101:
102: //关闭输出流
103: os.close();
104: }
105: return SUCCESS;
106: }
107: }
108:
109:
110:
3、struts.xml
1: <?xml version="1.0" encoding="UTF-8" ?>
2: <!DOCTYPE struts PUBLIC
3: "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
4: "http://struts.apache.org/dtds/struts-2.3.dtd">
5:
6: <struts>
7: <package name="sturts" extends="struts-default">
8: <action name="upload" class="cc.openhome.UploadAction">
9: <interceptor-ref name="fileUpload">
10: <!-- 用于规定只能上传的文件类型 -->
11: <param name="allowedTypes">image/bmp,image/png,image/gif,image/jpeg</param>
12: <param name="maximumSize">20000000</param>
13: </interceptor-ref>
14: <interceptor-ref name="defaultStack" />
15: <result name="success">/succ.jsp</result>
16: <result name="input">/upload.jsp</result>
17: </action>
18: </package>
19: </struts>
4、succ.jsp
1: <%@ page language="java" contentType="text/html; charset=UTF-8"
2: pageEncoding="UTF-8"%>
3: <%@ taglib prefix="s" uri="/struts-tags" %>
4: <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
5: <html>
6: <head>
7: <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
8: <title>图片显示</title>
9: </head>
10: <body>
11: <h2>上传成功!</h2>
12: 上传用户:${ username }<hr><br>
13: 第一个文件名:${ myFileFileName[0] }<br>
14: 第一个文件类型:${ myFileContentType[0] }<br>
15: 第一个文件为:<br><img src="<s:property value="'upload/'+myFileFileName[0]"/>"/><hr><br>
16: 第二个文件名:${ myFileFileName[1] }<br>
17: 第二个文件类型:${ myFileContentType[1] }<br>
18: 第二个文件为:<br><img src="<s:property value="'upload/'+myFileFileName[1]"/>"/><hr><br>
19: 第三个文件名:${ myFileFileName[2] }<br>
20: 第三个文件类型:${ myFileContentType[2] }<br>
21: 第三个文件为:<br><img src="<s:property value="'upload/'+myFileFileName[2]"/>"/><hr><br>
22: </body>
23: </html>
5、运行结果

Struts2文件的上传的更多相关文章
- struts2 文件的上传下载 表单的重复提交 自定义拦截器
文件上传中表单的准备 要想使用 HTML 表单上传一个或多个文件 须把 HTML 表单的 enctype 属性设置为 multipart/form-data 须把 HTML 表单的method 属性设 ...
- Struts2 - 文件的上传和下载
1. 前言 这个章节是Struts2框架应用最广泛的三个版块(上传下载.国际化.校验输入)之一,所以这一版块的学习还蛮重要的. 2. 具体内容 回到顶部 2.1Struts2文件上传 2.1.1单 ...
- struts2文件异步上传
代码结构 用到的js文件: 用到的jar包: jar和js库文件下载地址:下载地址 首先我们写FileAction类 package com.ajaxfile.action; import java. ...
- Struts2 文件的上传与下载
1. Struts2的文件上传需要Apache的commons-io-Version.jar和commons-fileupload-Version.jar两个jar包.2. 页面中的<s:fil ...
- Struts2文件的上传和下载实现
<一>简述: Struts2的文件上传其实也是通过拦截器来实现的,只是该拦截器定义为默认拦截器了,所以不用自己去手工配置,<interceptor name="fileUp ...
- [原创]java WEB学习笔记72:Struts2 学习之路-- 文件的上传下载,及上传下载相关问题
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- 关于在Struts2框架下实现文件的上传功能
struts2的配置过程 (1)在项目中加入jar包 (2)web.xml中filter(过滤器)的配置 <?xml version="1.0" encoding=" ...
- 使用Struts2实现文件的上传和下载
(一)单个文件的上传步骤: 1.拷贝jar包:commons-fileupload.jar, commons-io.jar 下载链接(文件上传.rar):http://www.cnblogs.com ...
- Struts2基础学习(六)—文件的上传和下载
一.文件的上传 1.单个文件上传 Struts2使用拦截器完成了文件的上传,而且底层使用的也是FileUpload开源组件. 客户端注意事项: (1)method="post&qu ...
随机推荐
- android脚步---UI界面修改,关于activity中增加按钮和监听
增加按钮和监听,这个和上个不同在于,它不是在一个dialog里面,而是从新写了一个activity,因此需要先找到这个activity的入口. case R.id.checkframe: if (mC ...
- u-boot添加一个hello命令
1.在common目录下建立一个cmd_hello.c文件 2.仿照/common/cmd_bootm.c文件修改,把cmd_bootm.c头文件复制过来 3.再复制do_bootm.U_BOOT_C ...
- bootstrap中可用的图标集
- 行内元素为何不能设置margin-top、margin-bottom;padding-top、padding-bottom值
曾经学过的教程中写明:行内元素的特点有: 1.与其他元素在同一行 2.宽度(width).高度(height).内边距的top/bottom(padding-top/padding-bottom)和外 ...
- Struts2--模块包含
login.xml: <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUB ...
- PAT (Advanced Level) 1026. Table Tennis (30)
情况比较多的模拟题. 交了50发的样子才AC......AC之后我的天空星星都亮了. #include<iostream> #include<cstring> #include ...
- Oracle存储过程中如何使用游标
--本存储过程的功能:把test_tbl2中与test_tbl1中ID相同但salary不同的记录中的salary的值更新为test_tbl1中的salary的值--创建存储过程create or r ...
- Cocos2dx 学习笔记整理----第一个项目
接上一节, 进入新建的项目下面的proj.win32下面,找到项目名.sln文件(我的是game001.sln),双击会通过VS2010打开.(当然,你装了VS什么版本就是什么版本) 将你的项目设为启 ...
- mysql忘记密码及无法使用程序连接
select(一)忘记root密码 很久之前装了mysql,后来做项目的时候,一直木有用到,就把密码给忘记了. 网上各种找,最终解决了这个问题了,记录下. 1)打开services,找到mysql服务 ...
- ARM-LINUX学习笔记-1
安装完linux之后记得系统更新,更新使用apt命令,如下(记得使用之前使用sudo -i 指令切换到root用户模式) apt-get update 更新系统软件源,相当于查找更新 apt-get ...