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 拦 ...
随机推荐
- mysql 外键(FOREIGN KEY)
最近有开始做一个实验室管理系统,因为分了几个表进行存储·所以要维护表间的关联··研究了一下MySQL的外键. (1)只有InnoDB类型的表才可以使用外键,mysql默认是MyISAM,这种类型不支持 ...
- js通过alert查看对象或数组内容
var arr=new Array("Saab","Volvo","BMW"); for(i in arr ){ alert(i); //获 ...
- Java统计数据库表中记录数
public static int count(String txyl_table) {// 获取用户数量 int i = 0;// Store_Information Connection con ...
- Centos上传下载小工具lrzsz
http://www.centoscn.com/image-text/install/2013/0819/1374.html
- C#表达式树的初步了解
在很早以前就听说过表达式树了,但并没有去了解它.虽然自己用过linq to sql和linq to entity,但也就用着就用着,并没有去深究c#代码怎么会生成sql代码而不是IL.废话不多说了,开 ...
- JQ系列:css操作
JQ中的 .css()有三种使用方法: $('#p').css('width'); 取得ID为p的样式属性的width值;等同 return width $('#p').css('width','10 ...
- 建站时注意敏感词的添加_seo优化禁忌
之前接手一个站点,网站标题中出现一个“三级医院”的词,虽然这个词在我们看来是没有问题的,医院评级中“三级医院”算是等级很高的,很多医院为了体现等级会在明显的地方着重加注.但是我们要考虑一下搜索引擎的分 ...
- java笔记--使用事件分配线程更新Swing控件
使用事件分配线程更新Swing控件: Swing并不是线程安全的,如果在多个线程中更新Swing控件,则很可能造成程序崩溃. 为了避免这种问题,可以使用时间分配线程来更新Swing控件. EventQ ...
- Android 将可以按地点自动启动应用程序
导读Android是一种基于Linux的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由Google公司和开放手机联盟领导及开发.尚未有统一中文名称,中国大陆地区较多人使用“安 ...
- 北工大耿丹学院16级计科院3班C语言课程助教学期总结
很荣幸得到邹老师,周老师,以及北工大耿丹学院各位老师的认可,担任计科院3班C语言课程助教,班主任为李光杰老师,很感谢李老师一学期的帮助,使得我更好的担任助教一职.我班学生31名,很愉快的与同学们度过一 ...