Struts 2文件上传

简介:

 (1)       基于表单的文件上传

在建立表单是,不要忘了使用enctype属性,并将它的值指定为multipart/form-date。表单enctype属性的缺省值是application/x-www-form-urlencoded,这种编码方案使用有限的字符集,当使用了非字母和数字的字符时,必须使用“%HH”代替(这里的H表示的十六进制数字)。

表单的methodpost

(2)       文件上传内容分析

对于文件上传来说,要读取文件的内容,不能使用ServletRequest接口的getParameter()方法,而需要调用ServletRequest接口的geInputSlream()方法来得到输入流,然后从输入流中读取传送的内容,再根据文件上传的格式进行分析,取出上传文件的内容和衣单中其他字段的内容。

(3)       Struts 2对文件上传的支持

Ⅰ:需要的JAR包:

Ø  commons-fileupload-1.2.1.jar

Ø  commons-io-1.3.2.jar

Ⅱ:Struts 2提供了一个文档上传的拦截器:org.apache.struts2.interceptor.FileUploadInterceptor。他负责调用底层的文件上传组件解析文件内容,并为Action准备与上传文件相关的属性值。处理文件请求的Action必须提供特殊式命名的属性。例如,若表单中文件选择框<input tepy=”file” name=”image”>

 

上传单个文件:

 

UpfileAction.java

 

 
  1. import java.io.BufferedInputStream; 
  2. import java.io.BufferedOutputStream; 
  3. import java.io.File; 
  4. import java.io.FileInputStream; 
  5. import java.io.FileOutputStream; 
  6. import java.util.Date; 
  7. import org.apache.struts2.ServletActionContext; 
  8. import com.opensymphony.xwork2.ActionSupport; 
  9. public class UpfileAction extends ActionSupport { 
  10.     private File file; 
  11.     private String fileFileName; 
  12.     private String fileContentType; 
  13.     private String description; 
  14.     //省略getter与setter方法 
  15.     @Override 
  16.     public String execute() throws Exception { 
  17.         String newFileName=null
  18.         long time =new Date().getTime();                //时间 
  19.         String pathServletActionContext.getServletContext().getRealPath("upfile");//保存上传文件的目录 
  20.         File dirnew File(path);                       //新建目录 
  21.         if(!dir.exists()){ 
  22.             dir.mkdir(); 
  23.         } 
  24.         int index=fileFileName.lastIndexOf("."); 
  25.         if (index ==-1) { 
  26.             newFileName=fileFileName.substring(0,index)+"-"+ time;  //文件名 
  27.         } else { 
  28.             newFileName =fileFileName.substring(0,index)+"-"+time+fileFileName.substring(index); 
  29.         } 
  30.         BufferedInputStream bin=null
  31.         BufferedOutputStream bout=null
  32.         try { 
  33.             FileInputStream fin =new FileInputStream(file); 
  34.             bin=new BufferedInputStream(fin); 
  35.             FileOutputStream fout =new FileOutputStream(new File(dir, newFileName)); 
  36.             bout=new BufferedOutputStream(fout); 
  37.             byte[] b=new byte[1024]; 
  38.             int len=0
  39.             while ((len=bin.read(b))!=-1) { 
  40.                 bout.write(b, 0, len); 
  41.             } 
  42.         } catch (Exception e) { 
  43.             System.out.println("写出数据失败!!!!"); 
  44.         }finally{ 
  45.             try { 
  46.                 bout.close(); 
  47.                 bin.close(); 
  48.             } catch (Exception e2) { 
  49.                 System.out.println("关闭数据流失败!!!!"); 
  50.             } 
  51.         } 
  52.         return SUCCESS; 
  53.     } 

upfile.jsp:

 

 
  1. <body> 
  2.     <s:form action="upfile" method="post" enctype="multipart/form-data"  > 
  3.         <s:file name="file" label="选择上传的文件"></s:file><br> 
  4.         <s:textfield name="description" label="文件描述"></s:textfield> 
  5.         <s:submit value="上传"></s:submit> 
  6.     </s:form> 
  7.   </body> 

success.jsp:

 

 
  1. <body> 
  2.     <center> 
  3.         <h1> 
  4.             <font color="red"> 
  5.                 文件名:<s:property value="fileFileName"/><br> 
  6.                 文件类型:<s:property value="fileContentType"/><br> 
  7.                 文件描述:<s:property value="description"/><br> 
  8.             </font> 
  9.         </h1> 
  10.     </center> 
  11.   </body> 

struts.xml:

 

 
  1. <!-- 设置上传文件的最大长度 --> 
  2.     <constant name="struts.multipart.maxSize" value="102400000"></constant> 
  3.     <package name="upfile" extends="struts-default"> 
  4.         <action name="upfile" class="com.mzsx.upfile.UpfileAction"> 
  5.             <result name="success">/s16/success.jsp</result> 
  6.             <result name="input">/s16/upfile.jsp</result> 
  7.         </action> 
  8.     </package> 

多文件上传

UpfileListAction.java

 

 
  1. import java.io.BufferedInputStream; 
  2. import java.io.BufferedOutputStream; 
  3. import java.io.File; 
  4. import java.io.FileInputStream; 
  5. import java.io.FileOutputStream; 
  6. import java.util.Date; 
  7. import java.util.List; 
  8. import org.apache.struts2.ServletActionContext; 
  9. import com.opensymphony.xwork2.ActionSupport; 
  10. public class UpfileListAction extends ActionSupport { 
  11.     private List<File> file; 
  12.     private List<String> fileFileName; 
  13.     private List<String> fileContentType; 
  14.     private List<String> description; 
  15.     //省略getter与setter方法 
  16.     @Override 
  17.     public String execute() throws Exception { 
  18.         String newFileName=null
  19.         long time =new Date().getTime();                //时间 
  20.         String pathServletActionContext.getServletContext().getRealPath("upfile");//保存上传文件的目录 
  21.         File dirnew File(path);                       //新建目录 
  22.         if(!dir.exists()){ 
  23.             dir.mkdir(); 
  24.         } 
  25.         for (int i=0;i<file.size();i++) { 
  26.             int index=fileFileName.get(i).lastIndexOf("."); 
  27.             if (index ==-1) { 
  28.                 newFileName=fileFileName.get(i).substring(0,index)+"-"+ time;   //文件名 
  29.             } else { 
  30.                 newFileName =fileFileName.get(i).substring(0,index)+"-"+time+fileFileName.get(i).substring(index); 
  31.             } 
  32.             BufferedInputStream bin=null
  33.             BufferedOutputStream bout=null
  34.             try { 
  35.                 FileInputStream fin =new FileInputStream(file.get(i)); 
  36.                 bin=new BufferedInputStream(fin); 
  37.                 FileOutputStream fout =new FileOutputStream(new File(dir, newFileName)); 
  38.                 bout=new BufferedOutputStream(fout); 
  39.                 byte[] b=new byte[1024]; 
  40.                 int len=-1; 
  41.                 while ((len=bin.read(b))!=-1) { 
  42.                     bout.write(b, 0, len); 
  43.                 } 
  44.             } catch (Exception e) { 
  45.                 System.out.println("写出数据失败!!!!"); 
  46.             }finally{ 
  47.                 try { 
  48.                     bout.close(); 
  49.                     bin.close(); 
  50.                 } catch (Exception e2) { 
  51.                     System.out.println("关闭数据流失败!!!!"); 
  52.                 } 
  53.             } 
  54.         } 
  55.         return SUCCESS; 
  56.     } 

upfile.jsp:

 

 
  1. <body> 
  2.     <s:form action="upfilelist" method="post" enctype="multipart/form-data"  > 
  3.         <s:file name="file" label="选择上传的文件"></s:file><br> 
  4.         <s:textfield name="description" label="文件描述"></s:textfield> 
  5.         <s:file name="file" label="选择上传的文件"></s:file><br> 
  6.         <s:textfield name="description" label="文件描述"></s:textfield> 
  7.         <s:file name="file" label="选择上传的文件"></s:file><br> 
  8.         <s:textfield name="description" label="文件描述"></s:textfield> 
  9.         <s:submit value="上传"></s:submit> 
  10.     </s:form> 
  11.   </body> 
  12. 注意:所有file同名。 

struts.xml

 
  1. <!-- 设置上传文件的最大长度 --> 
  2.     <constant name="struts.multipart.maxSize" value="102400000"></constant> 
  3.     <package name="upfilelist" extends="struts-default"> 
  4.         <action name="upfilelist" class="com.mzsx.upfile.UpfileListAction"> 
  5.             <result name="success">/s16/successList.jsp</result> 
  6.             <result name="input">/s16/upfileList.jsp</result> 
  7.         </action> 
  8.     </package> 

 

 

本文转自 梦朝思夕 51CTO博客,原文链接:http://blog.51cto.com/qiangmzsx/1143464



相关文章
|
XML Java 数据格式
|
前端开发 JavaScript Java
struts2的文件上传
在做B/S系统时,通常会涉及到上传文件和下载文件,在没接struts2框架之前,我们都是使用apache下面的commons子项目的FileUpload组件来进行文件的上传,但是那样做的话,代码看起来比较繁琐,而且不灵活,在学习了struts2后,struts2为文件上传下载提供了更好的实现机制,在...
937 0
Struts2文件上传
1  在Struts2中上传文件需要 commons-fileupload-1.2.1.jar、commons-io-1.3.2.jar 这两个包。  2  确认页面form表单上的提交方式为POST,enctype属性的值为“multipart/form-data”。
773 0
Struts1——文件上传
       在struts1中,框架本身引入commons-fileupload:         只需几行代码+配置,便可以完成文件的上传。      首先使我们form表单里面的配置:   然后在ActionForm中,将我们的input为file的提交项对应为FormFile类型: 在Action中,通过我们的ActionForm就可以直接拿到上传文件的信息,进行存盘,入库等操作。
983 0
|
Java Spring Apache
struts2 文件上传 三种方式
struts.multipart.maxSize=10240000:用于限制上传文件的大小struts.multipart.allowedTypes=.xls,.zip:用于限制上传文件类型struts.multipart.parser=pell:解决上传空文件的报错问题 struts.multipart.saveDir:该属性指定上传文件的临时保存路径,该属性的默认值是javax.se
1384 0