Quantcast
Channel: CSDN博客推荐文章
Viewing all articles
Browse latest Browse all 35570

Struts2 框架实现多文件上传下载

$
0
0

web.xml配置:

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <web-app version="2.5"   
  3.     xmlns="http://java.sun.com/xml/ns/javaee"   
  4.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
  5.     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   
  6.     http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">  
  7.   <welcome-file-list>  
  8.     <welcome-file>index.jsp</welcome-file>  
  9.   </welcome-file-list>  
  10.   <filter>  
  11.     <filter-name>struts2</filter-name>  
  12.     <filter-class>  
  13.         org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter  
  14.     </filter-class>  
  15.   </filter>  
  16.   <filter-mapping>  
  17.     <filter-name>struts2</filter-name>  
  18.     <url-pattern>*.action</url-pattern>  
  19.   </filter-mapping>  
  20.   </web-app>  

 

struts.xml配置:

  1. <?xml version="1.0" encoding="UTF-8" ?>  
  2. <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">  
  3. <struts>  
  4.   
  5. <constant name="struts.i18n.encoding" value="utf-8" />    
  6.   
  7. <package name="file" extends="struts-default">  
  8.     <action name="showUpload">  
  9.         <result>/upload.jsp</result>  
  10.     </action>  
  11.       
  12.     <action name="upload" class="com.boxun.hzw.action.UploadAction">  
  13.         <result name="input">/upload.jsp</result>  
  14.         <result>/download.jsp</result>  
  15.         <interceptor-ref name="fileUpload">  
  16.         <param name="maximumSize">2097152</param>  
  17.         <param name="addowedTypes">image/bmp,image/jpg</param>  
  18.         </interceptor-ref>  
  19.         <interceptor-ref name="defaultStack"></interceptor-ref>  
  20.     </action>  
  21.       
  22.     <action name="download" class="com.boxun.hzw.action.DownloadAction">  
  23.         <result name="success" type="stream">  
  24.             <param name="contentDisposition">attachment;filename="${fileName}"</param>  
  25.             <param name="inputName">downloadFile</param>  
  26.         </result>  
  27.     </action>  
  28.       
  29. </package>  
  30. </struts>    

 

后台实体类代码:

  1. package com.boxun.hzw.bean;  
  2.   
  3. public class UploadFiles {  
  4.     private String uploadContentType;  
  5.       
  6.     private String uploadFileName;  
  7.       
  8.     private String uploadRealName;  
  9.   
  10.     public String getUploadContentType() {  
  11.         return uploadContentType;  
  12.     }  
  13.   
  14.     public void setUploadContentType(String uploadContentType) {  
  15.         this.uploadContentType = uploadContentType;  
  16.     }  
  17.   
  18.     public String getUploadFileName() {  
  19.         return uploadFileName;  
  20.     }  
  21.   
  22.     public void setUploadFileName(String uploadFileName) {  
  23.         this.uploadFileName = uploadFileName;  
  24.     }  
  25.   
  26.     public String getUploadRealName() {  
  27.         return uploadRealName;  
  28.     }  
  29.   
  30.     public void setUploadRealName(String uploadRealName) {  
  31.         this.uploadRealName = uploadRealName;  
  32.     }  
  33. }  

 

 

上传Action类:

  1. package com.boxun.hzw.action;  
  2.   
  3. import java.io.*;  
  4.   
  5. import java.util.ArrayList;  
  6. import java.util.List;  
  7. import java.util.UUID;  
  8.   
  9. import org.apache.commons.io.FileUtils;  
  10. import org.apache.struts2.ServletActionContext;  
  11.   
  12. import com.boxun.hzw.bean.UploadFiles;  
  13. import com.opensymphony.xwork2.ActionContext;  
  14. import com.opensymphony.xwork2.ActionSupport;  
  15.   
  16. @SuppressWarnings("all")  
  17. public class UploadAction extends ActionSupport {  
  18.     private static final long serialVersionUID = 1L;  
  19.     private File[] upload; //实际上传文件  
  20.     private String[] uploadContentType; //文件的内容类型  
  21.     private String[] uploadFileName; //上传文件名  
  22.     private List<UploadFiles> uploadFiles = new ArrayList<UploadFiles>();  
  23.       
  24.     public String execute(){  
  25.         String targetDirectory = ServletActionContext.getServletContext().getRealPath("/"+"images/");//获得路径  
  26.         for(int i = 0 ; i < upload.length ; i++){  
  27.             String fileName = uploadFileName[i]; //上传的文件名  
  28.             String type = uploadContentType[i]; //文件类型  
  29.             String realName = UUID.randomUUID().toString() +   
  30.                              getExt(fileName); //保存的文件名称、使用UUID+后缀进行保存  
  31.             File target = new File(targetDirectory,realName);  
  32.             try {  
  33.                 FileUtils.copyFile(upload[i],target);//上传至服务器的目录  
  34.             } catch (IOException e) {  
  35.                 e.printStackTrace();  
  36.                 return INPUT;  
  37.             }   
  38.               
  39.             //把路径()写入数据库  ---省略---  
  40.             UploadFiles uf = new UploadFiles(); //创建文件  
  41.             uf.setUploadContentType(type);  
  42.             uf.setUploadFileName(fileName);  
  43.             uf.setUploadRealName(realName);  
  44.             uploadFiles.add(uf);  //添加到需要下载文件的List集合中  
  45.         }  
  46.         ServletActionContext.getRequest().setAttribute("uploadFiles", uploadFiles);  
  47.         return SUCCESS;  
  48.     }  
  49.       
  50.     public File[] getUpload() {  
  51.         return upload;  
  52.     }  
  53.   
  54.     public void setUpload(File[] upload) {  
  55.         this.upload = upload;  
  56.     }  
  57.   
  58.     public String[] getUploadContentType() {  
  59.         return uploadContentType;  
  60.     }  
  61.   
  62.     public void setUploadContentType(String[] uploadContentType) {  
  63.         this.uploadContentType = uploadContentType;  
  64.     }  
  65.   
  66.     public String[] getUploadFileName() {  
  67.         return uploadFileName;  
  68.     }  
  69.   
  70.     public void setUploadFileName(String[] uploadFileName) {  
  71.         this.uploadFileName = uploadFileName;  
  72.     }  
  73.   
  74.     public List<UploadFiles> getUploadFiles() {  
  75.         return uploadFiles;  
  76.     }  
  77.   
  78.     public void setUploadFiles(List<UploadFiles> uploadFiles) {  
  79.         this.uploadFiles = uploadFiles;  
  80.     }  
  81.   
  82.     public static long getSerialversionuid() {  
  83.         return serialVersionUID;  
  84.     }  
  85.   
  86.     public static String getExt(String fileName){  
  87.         return fileName.substring(fileName.lastIndexOf("."));  
  88.     }  
  89.       
  90. }  

 

下载Action类:

  1. package com.boxun.hzw.action;  
  2.   
  3. import java.io.InputStream;  
  4.   
  5. import java.io.UnsupportedEncodingException;  
  6.   
  7. import org.apache.struts2.ServletActionContext;  
  8.   
  9. import com.opensymphony.xwork2.ActionSupport;  
  10.   
  11. @SuppressWarnings("all")  
  12. public class DownloadAction extends ActionSupport {  
  13.       
  14.     private static final long serialVersionUID = 6329383258366253255L;  
  15.       
  16.     private String fileName;  
  17.       
  18.     private String fileRealName;  
  19.       
  20.       
  21.     public void setFileName(){  
  22.         //得到请求下载的文件名  
  23.         String fname = ServletActionContext.getRequest().getParameter("name");  
  24.         String frealname = ServletActionContext.getRequest().getParameter("realname");  
  25.         try {  
  26.             /* 
  27.              * 对fname参数进行utf-8解码、注意:实际进行utf-8解码时会使用本地编码、本机为GBK。 
  28.              * 这里使用reqeust.setCharacterEncoding解码无效. 
  29.              * 只有解码了getDownloadFile()方法才能在下载目录下正确找到请求的文件 
  30.              */  
  31.             fname = new String(fname.getBytes("ISO-8859-1"),"utf-8");  
  32.             frealname = new String(frealname.getBytes("ISO-8859-1"),"utf-8");  
  33.         } catch (UnsupportedEncodingException e) {  
  34.             e.printStackTrace();  
  35.         }  
  36.         this.fileName = fname;  
  37.         this.fileRealName = frealname;  
  38.           
  39.     }  
  40.       
  41.     /* 
  42.      * @getFileName 此方法对应的是struts.xml文件中的: 
  43.      * <param name ="contentDisposition"> attachment;filename="${fileName}"</param> 
  44.      * 这个属性设置的是下载工具下载文件时显示的文件名、要想正确的显示中文文件名, 
  45.      * 我们需要对fileName再次编码 
  46.      * 否则中文名文件将出现乱码、或无法下载情况 
  47.      * @return 
  48.      */  
  49.     public String getFileName(){  
  50.         try {  
  51.             fileRealName = new String (fileRealName.getBytes(),"ISO-8859-1");  
  52.         } catch (UnsupportedEncodingException e) {  
  53.             e.printStackTrace();  
  54.         }  
  55.         return fileRealName;  
  56.     }  
  57.       
  58.     /* 
  59.      * @getDownloadFile 此方法对应的是Struts.xml文件中的: 
  60.      * <param name="inputName">downloadFile</param> 
  61.      * 返回下载文件的流、可以参看Struts2的源码 
  62.      */  
  63.     public InputStream getDownloadFile(){  
  64.         this.setFileName();  
  65.         return ServletActionContext.getServletContext().getResourceAsStream("/"+"images/"+fileRealName);  
  66.     }  
  67.       
  68.     @Override  
  69.     public String execute() throws Exception{  
  70.         return SUCCESS;  
  71.     }  
  72.   
  73. }  

 

上传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 'upload.jsp' starting page</title>  
  13.       
  14.     <meta http-equiv="pragma" content="no-cache">  
  15.     <meta http-equiv="cache-control" content="no-cache">  
  16.     <meta http-equiv="expires" content="0">      
  17.     <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">  
  18.     <meta http-equiv="description" content="This is my page">  
  19.     <!-- 
  20.     <link rel="stylesheet" type="text/css" href="styles.css" mce_href="styles.css"> 
  21.     -->  
  22.   
  23.   </head>  
  24.     
  25.   <body>  
  26.   <form action="upload.action" method="post" enctype="multipart/form-data">  
  27.       <table>  
  28.         <tr>  
  29.             <td>上传文件</td>  
  30.             <td>标题:<input type="text" name="uploadFileName" />  
  31.             <input type="file" name="upload" /><br/>  
  32.             标题:<input type="text" name="uploadFileName" />  
  33.             <input type="file" name="upload" /><br/>  
  34.             标题:<input type="text" name="uploadFileName" />  
  35.             <input type="file" name="upload" /><br/>  
  36.             标题:<input type="text" name="uploadFileName" />  
  37.             <input type="file" name="upload" /><br/>  
  38.             标题:<input type="text" name="uploadFileName" />  
  39.             <input type="file" name="upload" />  
  40.             </td>  
  41.         </tr>  
  42.         <tr>  
  43.             <td><input type="submit" value="提交"/></td>  
  44.             <td><input type="reset" value="重置" /></td>  
  45.         </tr>  
  46.       </table>  
  47.   </form>  
  48.   </body>  
  49. </html>  

 

下载jsp页面:

  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  
  2. <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>  
  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 'download.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" mce_href="styles.css"> 
  22.     -->  
  23.   
  24.   </head>  
  25.     
  26.   <body>  
  27.   <c:forEach items="${uploadFiles}" var="files">  
  28.     <img src="images/${files.uploadRealName }" mce_src="images/${files.uploadRealName }" alt="ds" width="200px" height="300px" />  
  29.     <a href="download.action?name=${files.uploadFileName }&realname=${files.uploadRealName }" mce_href="download.action?name=${files.uploadFileName }&realname=${files.uploadRealName }" >${files.uploadFileName }</a><br/>  
  30.   </c:forEach>  
  31.   </body>  
  32. </html> 
作者:xuxu198899223 发表于2013-1-11 14:57:26 原文链接
阅读:52 评论:0 查看评论

Viewing all articles
Browse latest Browse all 35570

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>