Struts 文件上传(单文件/多文件)

<一>简述:

Struts2的文件上传其实也是通过拦截器来实现的,只是该拦截器定义为默认拦截器了,所以不用自己去手工配置,<interceptor name="fileUpload" class="org.apache.struts2.interceptor.FileUploadInterceptor"/>

<二>指定用户上传文件的大小,有两种方式

1)默认是在default.properties文件的 struts.multipart.maxSize=2097152,也就是2M,通过计算 2097152/(1024*1024) = 2 M,那我们可以改变其默认值,只要在src目录下,新建一个 struts.properties 文件,指定上传大小 如下:

一次上传只可以上传10M,不管一次上传多少个文件,按总和计算

2)在struts.xml文件中指定,如图:

其实name就对应struts.properties的键,value对应值。注意:如果即在struts.properties设定文件上传大小,又在struts.xml 设定文件上传大小,则struts.properties的优先级高于struts.xml,一般在一处指定上传大小即可,推荐 struts.properties

<三>Struts2之单文件上传

1.fileupload.jsp

  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  
  2. <%  
  3. String path = request.getContextPath();  
  4. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";  
  5. %>    
  6. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  7. <html>  
  8.   <head>  
  9.     <base href="<%=basePath%>">        
  10.     <title>My JSP 'fileupload.jsp' starting page</title>        
  11.     <meta http-equiv="pragma" content="no-cache">  
  12.     <meta http-equiv="cache-control" content="no-cache">  
  13.     <meta http-equiv="expires" content="0">      
  14.     <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">  
  15.     <meta http-equiv="description" content="This is my page">  
  16.     <!-- 
  17.     <link rel="stylesheet" type="text/css" href="styles.css"> 
  18.     -->    
  19.   </head>      
  20.   <body>  
  21.      <!-- enctype 默认是 application/x-www-form-urlencoded -->  
  22.      <form action="FileUpload2" enctype="multipart/form-data" method="post" >
  23.                用户名:<input type="text" name="usename"> <br/>  
  24.                上传文件:<input type="file" name="file1"><br/>                   
  25.               <input type="submit" value="提交"/>         
  26.      </form>       
  27.   </body>  
  28. </html>  

2.具体处理上传的 FileUpload.java

  1. package com.struts2.fileupload;  
  2.   
  3. import java.io.File;  
  4. import java.io.FileInputStream;  
  5. import java.io.FileOutputStream;  
  6. import java.io.InputStream;  
  7. import java.io.OutputStream;    
  8. import org.apache.struts2.ServletActionContext;    
  9. import com.opensymphony.xwork2.ActionSupport;  
  10.   
  11. /** 
  12.  * 单个文件上传 
  13.  * @author Administrator 
  14.  * 上传文件其实是上传了两份, 
  15.  *  
  16.  * 首先将上传的文件保存到 default.properties 文件中 struts.multipart.saveDir键指定的目录中 
  17.  * 默认是空的 
  18.  * 保存在  Tomcat 6.0\work\Catalina\localhost\struts2目录下以.tmp后缀名的文件 
  19.  *  
  20.  * 如果要在 struts.multipart.saveDir 指定目录, 则可以在 src文件夹下 建一个 struts.properties, 
  21.  * 覆盖  default.properties 的某些键值 
  22.  *  
  23.  * 还有一份是 存放在自己设定的目录下 
  24.  */  
  25. public class FileUpload extends ActionSupport {  
  26.       
  27.     private String usename ;  
  28.     private File file1 ; //具体上传文件的 引用 , 指向临时目录中的临时文件  
  29.     private String file1FileName ;  // 上传文件的名字 ,FileName 固定的写法  
  30.     private String file1ContentType ; //上传文件的类型, ContentType 固定的写法  
  31.       
  32.     public String getUsename() {  
  33.         return usename;  
  34.     }  
  35.     public void setUsename(String usename) {  
  36.         this.usename = usename;  
  37.     }  
  38.     public File getFile1() {  
  39.         return file1;  
  40.     }  
  41.     public void setFile1(File file1) {  
  42.         this.file1 = file1;  
  43.     }  
  44.     public String getFile1FileName() {  
  45.         return file1FileName;  
  46.     }  
  47.     public void setFile1FileName(String file1FileName) {  
  48.         this.file1FileName = file1FileName;  
  49.     }  
  50.     public String getFile1ContentType() {  
  51.         return file1ContentType;  
  52.     }  
  53.     public void setFile1ContentType(String file1ContentType) {  
  54.         this.file1ContentType = file1ContentType;  
  55.     }  
  56.       
  57.     @Override  
  58.     public String execute() throws Exception {  
  59.         //获取文件存储路径  
  60.         String path = ServletActionContext.getRequest().getRealPath("/upload");  
  61.         //输出流  
  62.         OutputStream os = new FileOutputStream(new File(path,file1FileName));  
  63.         //输入流  
  64.         InputStream is = new FileInputStream(file1);  
  65.           
  66.         byte[] buf = new byte[1024];  
  67.         int length = 0 ;  
  68.           
  69.         while(-1 != (length = is.read(buf) ) )  
  70.         {  
  71.             os.write(buf, 0, length) ;  
  72.         }  
  73.         is.close();  
  74.         os.close();  
  75.           
  76.         return SUCCESS;  
  77.     }  
  78. }  

3.最终显示结果的页面,filedemo.jsp

  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  
  2. <%@ taglib prefix="s" uri="/struts-tags" %>    
  3. <%  
  4. String path = request.getContextPath();  
  5. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";  
  6. %>  
  7.   
  8. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  9. <html>  
  10.   <head>  
  11.     <base href="<%=basePath%>">  
  12.       
  13.     <title>My JSP 'filedemo.jsp' starting page</title>  
  14.       
  15.     <meta http-equiv="pragma" content="no-cache">  
  16.     <meta http-equiv="cache-control" content="no-cache">  
  17.     <meta http-equiv="expires" content="0">      
  18.     <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">  
  19.     <meta http-equiv="description" content="This is my page">  
  20.     <!--  
  21.     <link rel="stylesheet" type="text/css" href="styles.css">  
  22.     -->  
  23.   
  24.   </head>      
  25.   <body>  
  26.     上传成功: <br/>  
  27.     usename: <s:property value="usename" /><br/>  
  28.     file: <s:property value="file1FileName"/><br/>  
  29.     contentType: <s:property value="file1ContentType"/>       
  30.   </body>  
  31. </html>  

<四>Struts2之多文件上传

1.fileupload.jsp

  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  
  2. <%  
  3. String path = request.getContextPath();  
  4. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";  
  5. %>  
  6.   
  7. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  8. <html>  
  9.   <head>  
  10.     <base href="<%=basePath%>">  
  11.       
  12.     <title>My JSP 'fileupload.jsp' starting page</title>        
  13.     <meta http-equiv="pragma" content="no-cache">  
  14.     <meta http-equiv="cache-control" content="no-cache">  
  15.     <meta http-equiv="expires" content="0">      
  16.     <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">  
  17.     <meta http-equiv="description" content="This is my page">  
  18.     <!-- 
  19.     <link rel="stylesheet" type="text/css" href="styles.css"> 
  20.     -->    
  21.   </head>      
  22.   <body>  
  23.      <!-- enctype 默认是 application/x-www-form-urlencoded -->  
  24.      <form action="FileUpload2" enctype="multipart/form-data" method="post" >            
  25.                用户名:<input type="text" name="usename"> <br/>  
  26.                上传文件:<input type="file" name="file1"><br/>  
  27.                上传文件: <input type="file" name="file1"><br/> <!-- 两个名字相同 都是file1 -->  
  28.               <input type="submit" value="提交"/>         
  29.      </form>  
  30.   </body>  
  31. </html>  

两个上传文件的name属性值要是一样的,后台方便处理

2.具体处理上传文件的FileUpload2.java。多文件上传用集合的方式:

  1. package com.struts2.fileupload;  
  2.   
  3. import java.io.File;  
  4. import java.io.FileInputStream;  
  5. import java.io.FileOutputStream;  
  6. import java.io.InputStream;  
  7. import java.io.OutputStream;  
  8. import java.util.List;  
  9.   
  10. import org.apache.struts2.ServletActionContext;  
  11.   
  12. import com.opensymphony.xwork2.ActionSupport;  
  13.   
  14. /** 
  15.  * 多文件上传,用集合的方式 
  16.  * @author Administrator  
  17.  */    
  18. public class FileUpload2 extends ActionSupport {  
  19.       
  20.     private String usename ;  
  21.     private List<File> file1 ;  
  22.     private List<String> file1FileName ;  
  23.     private List<String> file1ContentType ;  
  24.       
  25.     public String getUsename() {  
  26.         return usename;  
  27.     }  
  28.     public void setUsename(String usename) {  
  29.         this.usename = usename;  
  30.     }  
  31.     public List<File> getFile1() {  
  32.         return file1;  
  33.     }  
  34.     public void setFile1(List<File> file1) {  
  35.         this.file1 = file1;  
  36.     }  
  37.     public List<String> getFile1FileName() {  
  38.         return file1FileName;  
  39.     }  
  40.     public void setFile1FileName(List<String> file1FileName) {  
  41.         this.file1FileName = file1FileName;  
  42.     }  
  43.     public List<String> getFile1ContentType() {  
  44.         return file1ContentType;  
  45.     }  
  46.     public void setFile1ContentType(List<String> file1ContentType) {  
  47.         this.file1ContentType = file1ContentType;  
  48.     }  
  49.       
  50.     @Override  
  51.     public String execute() throws Exception {  
  52.           
  53.         //获取文件存储路径  
  54.         String path = ServletActionContext.getRequest().getRealPath("/upload");  
  55.           
  56.         for(int i = 0 ; i < file1.size() ; i++ )  
  57.         {  
  58.             OutputStream os = new FileOutputStream(new File(path,file1FileName.get(i)));  
  59.               
  60.             InputStream is = new FileInputStream(file1.get(i));  
  61.               
  62.             byte[] buf = new byte[1024];  
  63.             int length = 0 ;  
  64.               
  65.             while(-1 != (length = is.read(buf) ) )  
  66.             {  
  67.                 os.write(buf, 0, length) ;  
  68.             }                
  69.             is.close();  
  70.             os.close();                
  71.         }            
  72.         return SUCCESS;  
  73.     }    
  74. }  

3.用于显示的界面filedemo.jsp

  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  
  2. <%@ taglib prefix="s" uri="/struts-tags" %>  
  3.   
  4. <%  
  5. String path = request.getContextPath();  
  6. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";  
  7. %>  
  8.   
  9. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  10. <html>  
  11.   <head>  
  12.     <base href="<%=basePath%>">  
  13.       
  14.     <title>My JSP 'filedemo2.jsp' starting page</title>  
  15.       
  16.     <meta http-equiv="pragma" content="no-cache">  
  17.     <meta http-equiv="cache-control" content="no-cache">  
  18.     <meta http-equiv="expires" content="0">      
  19.     <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">  
  20.     <meta http-equiv="description" content="This is my page">  
  21.     <!-- 
  22.     <link rel="stylesheet" type="text/css" href="styles.css"> 
  23.     -->  
  24.   
  25.   </head>      
  26.   <body>  
  27.               上传成功:<br/>  
  28.      usename:<s:property value="usename"/><br/>  
  29.               <!-- 遍历值 -->  
  30.               <s:iterator value="file1FileName" id="f"> <!-- id是一个对象,目前是一个字符串集合  可任意命名 -->  
  31.                                                  文件:<s:property value="#f"/> <br/>    
  32.                <!-- 这里也可以调用方法  <s:property value="#f.toUpperCase()"/> -->  
  33.               </s:iterator>       
  34.   </body>  
  35. </html>  

遍历集合的方式,用struts2提供的标签 iterator 可以实现

              <s:iterator value="file1FileName" id="f"> <!-- id是一个对象,目前是一个字符串集合  可任意命名-->
                                                 文件:<s:property value="#f"/> <br/>  
               <!-- 这里也可以调用方法  <s:property value="#f.toUpperCase()"/> -->

               toUpperCase()字符串的方法是把字母转为大写
              </s:iterator>

下载链接:

1)Servlet 文件上传 ————  点击打开链接

2)Struts2之下载  点击打开链接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
水资源是人类社会的宝贵财富,在生活、工农业生产中是不可缺少的。随着世界人口的增长及工农业生产的发展,需水量也在日益增长,水已经变得比以往任何时候都要珍贵。但是,由于人类的生产和生活,导致水体的污染,水质恶化,使有限的水资源更加紧张。长期以来,油类物质(石油类物质和动植物油)一直是水和土壤中的重要污染源。它不仅对人的身体健康带来极大危害,而且使水质恶化,严重破坏水体生态平衡。因此各国都加强了油类物质对水体和土壤的污染的治理。对于水中油含量的检测,我国处于落后阶段,与国际先进水平存在差距,所以难以满足当今技术水平的要求。为了取得具有代表性的正确数据,使分析数据具有与现代测试技术水平相应的准确性和先进性,不断提高分析成果的可比性和应用效果,检测的方法和仪器是非常重要的。只有保证了这两方面才能保证快速和准确地测量出水中油类污染物含量,以达到保护和治理水污染的目的。开展水中油污染检测方法、技术和检测设备的研究,是提高水污染检测的一条重要措施。通过本课题的研究,探索出一套适合我国国情的水质污染现场检测技术和检测设备,具有广泛的应用前景和科学研究价值。 本课题针对我国水体的油污染,探索一套检测油污染的可行方案和方法,利用非分散红外光度法技术,开发研制具有自主知识产权的适合国情的适于野外便携式的测油仪。利用此仪器,可以检测出被测水样中亚甲基、甲基物质和动植物油脂的污染物含量,为我国众多的环境检测站点监测水体的油污染状况提供依据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值