Struts2笔记--文件上传
Servlet 3.0规范的HttpServletRequest已经提供了方法来处理文件上传但这种上传需要在Servlet中完成。而Struts2则提供了更简单的封装。
Struts2默认使用的是Jakarta的Common-FileUpload的文件上传框架,因此使用Struts2的文件上传功能,则需要添加两个jar包,即commons-io-2.2.jar和commons-fileupload-1.3.1.jar。
Struts2简单文件上传示例:
1.文件上传页面
为了能上传文件,表单的method必须设置为POST,并且enctype设置为multipart/form-data。一旦设置了enctype为multipart/form-data,此时浏览器将会采用二进制流的方式来处理表单数据。
<%@ taglib prefix="s" uri="/struts-tags" %>
<%--
Created by IntelliJ IDEA.
User: Administrator
Date: 2018/1/16
Time: 14:06
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Struts2 简单文件上传</title>
</head>
<body>
<s:form action="file_upload" method="POST" enctype="multipart/form-data">
<s:file name="upload" label="选择文件"/>
<s:submit value="上传"/>
</s:form>
</body>
</html>
2.处理上传请求的Action
/**
* Description:Struts2简单文件上传
* Author: Eleven
* Date: 2018/1/24 10:39
*/
public class FileAction extends ActionSupport{ //上传文件
private File upload;
//上传文件类型
private String uploadContentType;
//上传文件名
private String uploadFileName; //文件上传允许的类型在struts.xml中使用param标签动态设置了
private String allowTypes; public String page(){
return "page";
} public void upload() { //文件上传:
//1.读取文件内容
//2.将文件内容写到指定文件
try{
System.out.println("文件上传允许的类型="+allowTypes);
String realPath = ServletActionContext.getServletContext().getRealPath("/upload");
System.out.println("项目的绝对路径="+realPath);
//创建文件保存目录
new File(realPath).mkdir();
File file = new File(realPath+"/"+uploadFileName);
//文件不存在则创建
if(!file.exists()){
file.createNewFile();
}
FileOutputStream out = new FileOutputStream(file);
FileInputStream in = new FileInputStream(upload);
byte[] buffer = new byte[1024];
int len = 0;
//边读边写 每次读取1kb 写1kb
while((len = in.read(buffer))>0){
out.write(buffer,0,len);
}
System.out.println("文件上传成功...");
}catch(Exception e){
e.printStackTrace();
} } public File getUpload() {
return upload;
} public void setUpload(File upload) {
this.upload = upload;
} public String getUploadContentType() {
return uploadContentType;
} public void setUploadContentType(String uploadContentType) {
this.uploadContentType = uploadContentType;
} public String getUploadFileName() {
return uploadFileName;
} public void setUploadFileName(String uploadFileName) {
this.uploadFileName = uploadFileName;
} public String getAllowTypes() {
return allowTypes;
} public void setAllowTypes(String allowTypes) {
this.allowTypes = allowTypes;
}
}
如果表单中包含一个name属性为xxx的文件域,则对应的Action中需要使用三个成员变量来封装该文件域的信息。
类型为File的xxx成员变量封装了该文件域对应的文件内容。
类型为String的xxxFileName成员变量封装了该文件域对应的文件的文件名。
类型为String的xxxContentType成员变量封装了该文件域对应的文件的文件类型。
3.配置struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd"> <struts>
<constant name="struts.enable.DynamicMethodInvocation" value="false" />
<constant name="struts.devMode" value="true" /> <package name="default" namespace="/" extends="struts-default"> <!--文件上传-->
<action name="file_*" class="eleven.action.FileAction" method="{1}">
<result name="page">/WEB-INF/jsp/fileUpload.jsp</result>
<!--动态设置action的属性,这里举例设置了允许文件上传的类型,但是action程序中并未做过多的处理-->
<param name="allowTypes">image/png,image/gif,image/jpeg</param>
</action> </package> </struts>
拦截器实现文件过滤
Struts2提供了一个文件上传的拦截器,fileUpload,为了让该拦截器起作用,要在action中配置拦截器引用。
配置fileUpload拦截器时,可以为其指定两个参数:
allowTypes:允许上传的文件类型,多个文件类型之间用英文逗号,隔开
maximumSize:允许上传的文件大小,单位是字节。
当文件过滤失败后,系统自动转入input逻辑视图,因此必须为该Action配置名为input的逻辑视图。除此之外,还必须显示地为该Action配置defaultStack的拦截器引用。
struts.xml配置文件如下:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd"> <struts>
<constant name="struts.enable.DynamicMethodInvocation" value="false" />
<constant name="struts.devMode" value="true" /> <package name="default" namespace="/" extends="struts-default"> <!--文件上传-->
<action name="file_*" class="eleven.action.FileAction" method="{1}">
<!--配置fileUpload拦截器 且配置在defaultStack拦截器栈之前-->
<interceptor-ref name="fileUpload">
<!--允许上传的文件类型-->
<param name="allowedTypes">image/png,image/gif,image/jpeg</param>
<!--允许上传文件大小-->
<param name="maximumSize">2000</param>
</interceptor-ref>
<!--配置系统默认拦截器-->
<interceptor-ref name="defaultStack"/>
<!--配置input视图页面-->
<result name="input">/WEB-INF/jsp/input.jsp</result> <result name="page">/WEB-INF/jsp/fileUpload.jsp</result>
</action> </package> </struts>
上面配置的文件上传的拦截器,要求文件上传的类型只能是图片文件,并且文件大小不能大于2000字节,如果上传文件太大,或者类型不符合,则将跳转到input逻辑视图。
Struts2笔记--文件上传的更多相关文章
- Struts2笔记——文件上传
文件上传概述 * 要想使用HTML 表单上传一个或多个文件, 必须把 HTML 表单的 enctype 属性设置为multipart/form-data,把它的 method 属性设置为post * ...
- struts2的文件上传
在做B/S系统时,通常会涉及到上传文件和下载文件,在没接struts2框架之前,我们都是使用apache下面的commons子项目的FileUpload组件来进行文件的上传,但是那样做的话,代码看起来 ...
- jsp\struts1.2\struts2 中文件上传(转)
jsp\struts1.2\struts2 中文件上传 a.在jsp中简单利用Commons-fileupload组件实现 b.在struts1.2中实现c.在sturts2中实现现在把Code与大家 ...
- Struts2+Uploadify文件上传使用详解
Uploadify是JQuery的一个上传插件,实现的效果非常不错,带进度显示.不过官方提供的实例是php版本的,本文将详细介绍Uploadify在java中的使用,您也可以点击下面的链接进行演示或下 ...
- Struts2 多文件上传
Struts2多文件上传只需要将 单文件上传中的File变成File[] 即可,上篇文章:单文件上传 <form action="${pageContext.request.cont ...
- Struts2图片文件上传,判断图片格式和图片大小
1. 配置Struts2能够上传的最大文件大小 使用Struts2进行文件上传的时候,Struts2默认文件大小最大为2MB,如果要传大一点的文件,就需要修改struts.xml配置文件,重新设置能够 ...
- Struts2实现文件上传下载功能(批量上传)
今天来发布一个使用Struts2上传下载的项目, struts2为文件上传下载提供了好的实现机制, 首先,可以先看一下我的项目截图 关于需要使用的jar包,需要用到commons-fileupload ...
- Struts2实现文件上传(四)
Struts2实现文件上传 配置文件struts.xml <!-- /* * $Id: struts.xml 1364077 2012-07-21 12:57:02Z lukaszlenart ...
- Struts2实现文件上传(三)
Struts2实现文件上传 配置文件web.xml <?xml version="1.0" encoding="UTF-8"?> <web-a ...
随机推荐
- LDA学习笔记
线性判别分析(Linear Discriminant Analysis,简称LDA)是一种经典的线性学习方法.其思想非常朴素,设法将样例投影到一条直线上,使得同类样例的投影点尽可能接近,异类的样例的投 ...
- django之HTTPResponse和JsonResponse详解
HttpResponse对象 Django服务器接收到客户端发送过来的请求后,会将提交上来的这些数据封装成一个HttpRequest对象传给视图函数.那么视图函数在处理完相关的逻辑后,也需要返回一个响 ...
- ocrosoft Contest1316 - 信奥编程之路~~~~~第三关 问题 M: 当总统
http://acm.ocrosoft.com/problem.php?cid=1316&pid=12 题目描述 小明想当丑国的总统,丑国大选是按各州的投票结果来确定最终的结果的,如果得到超过 ...
- 使用SecureCRT设置linux系统登录的ssh公钥认证
1.修改ssh配置文件/etc/ssh/sshd_configRSAAuthentication yes //使用RSA加密算法PubkeyAu ...
- CSLM 配置粗解
CSLM工具(continuous space language model toolkit)用于训练NNLM,支持SRILM.KENLM(默认)语言模型工具,CUDA加速,CSTM统计机器翻译. 本 ...
- BZOJ1800 [Ahoi2009]fly 飞行棋 【枚举】
题目 给出圆周上的若干个点,已知点与点之间的弧长,其值均为正整数,并依圆周顺序排列. 请找出这些点中有没有可以围成矩形的,并希望在最短时间内找出所有不重复矩形. 输入格式 第一行为正整数N,表示点的个 ...
- 洛谷 P2606 [ZJOI2010]排列计数 解题报告
P2606 [ZJOI2010]排列计数 题目描述 称一个\(1,2,...,N\)的排列\(P_1,P_2...,P_n\)是\(Magic\)的,当且仅当对所以的\(2<=i<=N\) ...
- DP———7.导弹拦截(emmm冷静分析一波也不叫DP吧,不过有一种DP的方法写)
最少拦截系统 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Subm ...
- Linuxmint:MySQL安装指南(转贴)
这篇文章来自以下网站:http://wiki.ubuntu.com.cn/MySQL. 安装MySQL sudo apt-get install mysql-server 这个应该很简单了,而且我觉得 ...
- 行为型设计模式之职责链模式(Chain of Responsibility)
结构 意图 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系.将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止. 适用性 有多个的对象可以处理一个请求,哪个 ...