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>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值