转自: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>
|