struts2文件上传类型的过滤
转自:http://www.2cto.com/kf/201403/282787.html
第一种解决方案:
1.手动实现文件过滤:
判断上传的文件是否在允许的范围内
定义该Action允许上传的文件类型 private String allowTypes;
利用Struts2的输入效验判断用户的输入的文件是否合理
UploadAction.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
|
package action; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionSupport; public class UploadAction extends ActionSupport { /** * */ private static final long serialVersionUID = 1L; private String title; private File uploadfile; private String uploadfileContentType; private String uploadfileFileName; private String savePath; private String allowType; //定义该Action允许上传的文件类型 public boolean check(String type){ String[] types=allowType.split( "," ); for (String s:types){ if (s.equals(type)){ return true ; } } return false ; } public void validate(){ boolean b=check(uploadfileContentType); if (!b){ addFieldError( "upload" , "上传文件错误" ); } } public String getAllowType() { return allowType; } public void setAllowType(String allowType) { this .allowType = allowType; } public String upload() throws Exception { FileInputStream fis = new FileInputStream(getUploadfile()); FileOutputStream fos= new FileOutputStream(getSavePath()+ "\\" +getUploadfileFileName()); byte [] buffer= new byte [ 1024 ]; int len= 0 ; while ((len=fis.read(buffer))> 0 ){ fos.write(buffer, 0 ,len); } fos.close(); fis.close(); return SUCCESS; } public String getTitle() { return title; } public void setTitle(String title) { this .title = title; } public File getUploadfile() { return uploadfile; } public void setUploadfile(File uploadfile) { this .uploadfile = uploadfile; } public String getUploadfileContentType() { return uploadfileContentType; } public void setUploadfileContentType(String uploadfileContentType) { this .uploadfileContentType = uploadfileContentType; } public String getUploadfileFileName() { return uploadfileFileName; } public void setUploadfileFileName(String uploadfileFileName) { this .uploadfileFileName = uploadfileFileName; } public String getSavePath() { return ServletActionContext.getServletContext().getRealPath(savePath); //得到绝对路径 } public void setSavePath(String savePath) { this .savePath = savePath; } } |
struts.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
<!--?xml version= "1.0" encoding= "UTF-8" ?--> <struts> < package name= "hello" namespace= "/hello" extends = "struts-default" > <!-- 设置允许上传的文件类型 --> <param name= "allowType" >image/x-png,file/txt,image/jpeg <param name= "savePath" >/uploadFiles <result name= "success" > /success.jsp </result> <result name= "input" > /index.jsp </result> </action> </ package > </struts> |
index.jsp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
<%@ page language= "java" import = "java.util.*" pageEncoding= "UTF-8" %> <% @taglib prefix= "s" uri= "/struts-tags" %>> <% String path = request.getContextPath(); String basePath = request.getScheme()+ "://" +request.getServerName()+ ":" +request.getServerPort()+path+ "/" ; %> <html> <title>My JSP 'index.jsp' starting page</title> <meta http-equiv= "pragma" content= "no-cache" > <meta http-equiv= "cache-control" content= "no-cache" > <meta http-equiv= "expires" content= "0" > <meta http-equiv= "keywords" content= "keyword1,keyword2,keyword3" > <meta http-equiv= "description" content= "This is my page" > <!-- <link rel= "stylesheet" type= "text/css" href= "styles.css" > --> <s:fielderror> <form action= "/Upload-1/hello/login" method= "post" enctype= "multipart/form-data" > 文件名:<input type= "text" name= "title" > 文件:<input type= "file" name= "uploadfile" > <input type= "submit" > </form> </s:fielderror> |
success.jsp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
<%@ page language= "java" import = "java.util.*" pageEncoding= "UTF-8" %> <% @taglib prefix= "s" uri= "/struts-tags" %> <% String path = request.getContextPath(); System.out.println(path); String basePath = request.getScheme()+ "://" +request.getServerName()+ ":" +request.getServerPort()+path+ "/" ; System.out.println(basePath); %> 上传成功!<br> 文件标题:<s:property value= "title" ><br> 文件为:<img src= "" 'uploadfiles="" ' +uploadfilefilename "=" " style=" display: none; "><img alt=" 加载中... " title=" 图片加载中... " src=" http: //www.2cto.com/statics/images/s_nopic.gif">"/><br> </s:property> |
第二种解决方案:
2.拦截器实现文件过滤:
配置fileUpload拦截器两个参数:
allowedTypes:允许上传文件的类型,多个值用,分开
maximumSize:允许上传文件的大小,单位字节。
UploadAction.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
|
package action; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionSupport; public class UploadAction extends ActionSupport { /** * */ private static final long serialVersionUID = 1L; private String title; private File uploadfile; private String uploadfileContentType; private String uploadfileFileName; private String savePath; private String allowedTypes; public String getAllowedTypes() { return allowedTypes; } public void setAllowedTypes(String allowedTypes) { this .allowedTypes = allowedTypes; } public String upload() throws Exception { FileInputStream fis = new FileInputStream(getUploadfile()); FileOutputStream fos= new FileOutputStream(getSavePath()+ "\\" +getUploadfileFileName()); byte [] buffer= new byte [ 1024 ]; int len= 0 ; while ((len=fis.read(buffer))> 0 ){ fos.write(buffer, 0 ,len); } fos.close(); fis.close(); return SUCCESS; } public String getTitle() { return title; } public void setTitle(String title) { this .title = title; } public File getUploadfile() { return uploadfile; } public void setUploadfile(File uploadfile) { this .uploadfile = uploadfile; } public String getUploadfileContentType() { return uploadfileContentType; } public void setUploadfileContentType(String uploadfileContentType) { this .uploadfileContentType = uploadfileContentType; } public String getUploadfileFileName() { return uploadfileFileName; } public void setUploadfileFileName(String uploadfileFileName) { this .uploadfileFileName = uploadfileFileName; } public String getSavePath() { return ServletActionContext.getServletContext().getRealPath(savePath); //得到绝对路径 } public void setSavePath(String savePath) { this .savePath = savePath; } } |
struts.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
<!--?xml version= "1.0" encoding= "UTF-8" ?--> <struts> < package name= "hello" namespace= "/hello" extends = "struts-default" > <interceptor-ref name= "fileUpload" > <param name= "allowedTypes" >image/x-png,image/gif,image/jpeg <param name= "maximumSize" > 20000000 </interceptor-ref> <interceptor-ref name= "defaultStack" ></interceptor-ref> <param name= "savePath" >/uploadFiles <result name= "success" > /success.jsp </result> <result name= "input" > /index.jsp </result> </action> </ package > </struts>
|
struts2文件上传类型的过滤的更多相关文章
- struts2文件上传,文件类型 allowedTypes
struts2文件上传,文件类型 allowedTypes 1 '.a' : 'application/octet-stream', 2 '.ai' : 'application/postscript ...
- Struts2文件上传和下载(原理)
转自:http://zhou568xiao.iteye.com/blog/220732 1. 文件上传的原理:表单元素的enctype属性指定的是表单数据的编码方式,该属性有3个值:1) ...
- 【Java EE 学习 35 下】【struts2】【struts2文件上传】【struts2自定义拦截器】【struts2手动验证】
一.struts2文件上传 1.上传文件的时候要求必须使得表单的enctype属性设置为multipart/form-data,把它的method属性设置为post 2.上传单个文件的时候需要在Act ...
- springMvc 使用ajax上传文件,返回获取的文件数据 附Struts2文件上传
总结一下 springMvc使用ajax文件上传 首先说明一下,以下代码所解决的问题 :前端通过input file 标签获取文件,通过ajax与后端交互,后端获取文件,读取excel文件内容,返回e ...
- Struts2文件上传下载
Struts2文件上传 Struts2提供 FileUpload拦截器,用于解析 multipart/form-data 编码格式请求,解析上传文件的内容,fileUpload拦截器 默认在defau ...
- Struts2 文件上传
一:表单准备 ① 要想使用HTML 表单上传一个或多个文件 –须把 HTML表单的 enctype属性设置为multipart/form-data –须把HTML 表单的method ...
- Struts2文件上传方式与上传失败解决方式
首先将几个对象弄出来第一个 上传页面第二个 上传action第三个 startut2配置文件 我的文字描述不是很好,但是终归是自己写出来的,后来我在网上看到一篇关于文件上传描述的非常清楚的文章, 链接 ...
- JAVA Web 之 struts2文件上传下载演示(一)(转)
JAVA Web 之 struts2文件上传下载演示(一) 一.文件上传演示 1.需要的jar包 大多数的jar包都是struts里面的,大家把jar包直接复制到WebContent/WEB-INF/ ...
- (八)Struts2 文件上传和下载
所有的学习我们必须先搭建好Struts2的环境(1.导入对应的jar包,2.web.xml,3.struts.xml) 第一节:Struts2 文件上传 Struts2 文件上传基于Struts2 拦 ...
随机推荐
- Ubuntu格式化分区时的一个小错误
admin@gpc:/$ sudo mkfs -t ext3 -c /dev/sdb1 mkfs.ext3: inode_size (128) * inodes_count (0) too big ...
- ios开发@selector的函数如何传参数/如何传递多个参数
不同的类会有不同的传递方式,参数名也不尽相同.如果是传单个参数的就不用集合,如果是传多个参数可以用类似nsarray,nsdictionary之类的集合传递.看下面例子: 例子1: 通过NSTimer ...
- ggplot绘图学习笔记
0.查看R的系统帮助文档 标度 scale breaks, labels, limits, labs dose <- c(20, 30, 40, 45,60) drugA <- c(16, ...
- 15个超实用的php正则表达式
在这篇文章里,我已经编写了15个超有用的正则表达式,WEB开发人员都应该将它收藏到自己的工具包. 验证域名 检验一个字符串是否是个有效域名. $url = "http://komunitas ...
- XSS 探索
1. 什么是XSS攻击? 正常的页面被渗出了攻击者的js脚本,这些脚本可以非法地获取用户信息,然后将信息发送到attacked的服务端. XSS是需要充分利用输出环境来构造攻击脚本的 2. 危害 非法 ...
- 后台返回json数据,前台显示代码
List list = "从DAL获取的数据集合" //取出分页标签html int pageIndex = context.Request["pageIndex&quo ...
- 作为一名职高生学习Linux的心酸经历
当你点进这篇文章的时候,一定会好奇我为什么要用“心酸”这个词,这个词已经太久没被人提起,也许心酸这种感情只能存在于一个人在追中梦想过程中内心角落吧.从小我们总是会被问这样一个问题“你的梦想是什么?”每 ...
- 关于seajs
(这些文章都是从我的个人主页上粘贴过来的,大家也可以访问我的主页 www.iwangzheng.com) 最近经常听到各种JS前缀的名称,瞬间感觉自己弱爆了,啥都没用过呢,这么下去将来怎么嫁人呢. ...
- BestCoder Round #60 题解链接
题解 题目 1001 GT and sequence 注意先特判000的情况:如果读入的数据有000,那么去掉所有的000且最后答案和000取一个max. 剩下的正数显然全部乘起来比较优. 对于负数 ...
- 【转】Spring@Autowired注解与自动装配
1 配置文件的方法 我们编写spring 框架的代码时候.一直遵循是这样一个规则:所有在spring中注入的bean 都建议定义成私有的域变量.并且要配套写上 get 和 set方法. Boss ...