`

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

 
阅读更多

web.xml配置:

  1. <?xmlversion="1.0"encoding="UTF-8"?>
  2. <web-appversion="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. <?xmlversion="1.0"encoding="UTF-8"?>
  2. <!DOCTYPEstrutsPUBLIC"-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.1//EN""http://struts.apache.org/dtds/struts-2.1.dtd">
  3. <struts>
  4. <constantname="struts.i18n.encoding"value="utf-8"/>
  5. <packagename="file"extends="struts-default">
  6. <actionname="showUpload">
  7. <result>/upload.jsp</result>
  8. </action>
  9. <actionname="upload"class="com.boxun.hzw.action.UploadAction">
  10. <resultname="input">/upload.jsp</result>
  11. <result>/download.jsp</result>
  12. <interceptor-refname="fileUpload">
  13. <paramname="maximumSize">2097152</param>
  14. <paramname="addowedTypes">image/bmp,image/jpg</param>
  15. </interceptor-ref>
  16. <interceptor-refname="defaultStack"></interceptor-ref>
  17. </action>
  18. <actionname="download"class="com.boxun.hzw.action.DownloadAction">
  19. <resultname="success"type="stream">
  20. <paramname="contentDisposition">attachment;filename="${fileName}"</param>
  21. <paramname="inputName">downloadFile</param>
  22. </result>
  23. </action>
  24. </package>
  25. </struts>

后台实体类代码:

  1. packagecom.boxun.hzw.bean;
  2. publicclassUploadFiles{
  3. privateStringuploadContentType;
  4. privateStringuploadFileName;
  5. privateStringuploadRealName;
  6. publicStringgetUploadContentType(){
  7. returnuploadContentType;
  8. }
  9. publicvoidsetUploadContentType(StringuploadContentType){
  10. this.uploadContentType=uploadContentType;
  11. }
  12. publicStringgetUploadFileName(){
  13. returnuploadFileName;
  14. }
  15. publicvoidsetUploadFileName(StringuploadFileName){
  16. this.uploadFileName=uploadFileName;
  17. }
  18. publicStringgetUploadRealName(){
  19. returnuploadRealName;
  20. }
  21. publicvoidsetUploadRealName(StringuploadRealName){
  22. this.uploadRealName=uploadRealName;
  23. }
  24. }

上传Action类:

  1. packagecom.boxun.hzw.action;
  2. importjava.io.*;
  3. importjava.util.ArrayList;
  4. importjava.util.List;
  5. importjava.util.UUID;
  6. importorg.apache.commons.io.FileUtils;
  7. importorg.apache.struts2.ServletActionContext;
  8. importcom.boxun.hzw.bean.UploadFiles;
  9. importcom.opensymphony.xwork2.ActionContext;
  10. importcom.opensymphony.xwork2.ActionSupport;
  11. @SuppressWarnings("all")
  12. publicclassUploadActionextendsActionSupport{
  13. privatestaticfinallongserialVersionUID=1L;
  14. privateFile[]upload;//实际上传文件
  15. privateString[]uploadContentType;//文件的内容类型
  16. privateString[]uploadFileName;//上传文件名
  17. privateList<UploadFiles>uploadFiles=newArrayList<UploadFiles>();
  18. publicStringexecute(){
  19. StringtargetDirectory=ServletActionContext.getServletContext().getRealPath("/"+"images/");//获得路径
  20. for(inti=0;i<upload.length;i++){
  21. StringfileName=uploadFileName[i];//上传的文件名
  22. Stringtype=uploadContentType[i];//文件类型
  23. StringrealName=UUID.randomUUID().toString()+
  24. getExt(fileName);//保存的文件名称、使用UUID+后缀进行保存
  25. Filetarget=newFile(targetDirectory,realName);
  26. try{
  27. FileUtils.copyFile(upload[i],target);//上传至服务器的目录
  28. }catch(IOExceptione){
  29. e.printStackTrace();
  30. returnINPUT;
  31. }
  32. //把路径()写入数据库---省略---
  33. UploadFilesuf=newUploadFiles();//创建文件
  34. uf.setUploadContentType(type);
  35. uf.setUploadFileName(fileName);
  36. uf.setUploadRealName(realName);
  37. uploadFiles.add(uf);//添加到需要下载文件的List集合中
  38. }
  39. ServletActionContext.getRequest().setAttribute("uploadFiles",uploadFiles);
  40. returnSUCCESS;
  41. }
  42. publicFile[]getUpload(){
  43. returnupload;
  44. }
  45. publicvoidsetUpload(File[]upload){
  46. this.upload=upload;
  47. }
  48. publicString[]getUploadContentType(){
  49. returnuploadContentType;
  50. }
  51. publicvoidsetUploadContentType(String[]uploadContentType){
  52. this.uploadContentType=uploadContentType;
  53. }
  54. publicString[]getUploadFileName(){
  55. returnuploadFileName;
  56. }
  57. publicvoidsetUploadFileName(String[]uploadFileName){
  58. this.uploadFileName=uploadFileName;
  59. }
  60. publicList<UploadFiles>getUploadFiles(){
  61. returnuploadFiles;
  62. }
  63. publicvoidsetUploadFiles(List<UploadFiles>uploadFiles){
  64. this.uploadFiles=uploadFiles;
  65. }
  66. publicstaticlonggetSerialversionuid(){
  67. returnserialVersionUID;
  68. }
  69. publicstaticStringgetExt(StringfileName){
  70. returnfileName.substring(fileName.lastIndexOf("."));
  71. }
  72. }

下载Action类:

  1. packagecom.boxun.hzw.action;
  2. importjava.io.InputStream;
  3. importjava.io.UnsupportedEncodingException;
  4. importorg.apache.struts2.ServletActionContext;
  5. importcom.opensymphony.xwork2.ActionSupport;
  6. @SuppressWarnings("all")
  7. publicclassDownloadActionextendsActionSupport{
  8. privatestaticfinallongserialVersionUID=6329383258366253255L;
  9. privateStringfileName;
  10. privateStringfileRealName;
  11. publicvoidsetFileName(){
  12. //得到请求下载的文件名
  13. Stringfname=ServletActionContext.getRequest().getParameter("name");
  14. Stringfrealname=ServletActionContext.getRequest().getParameter("realname");
  15. try{
  16. /*
  17. *对fname参数进行utf-8解码、注意:实际进行utf-8解码时会使用本地编码、本机为GBK。
  18. *这里使用reqeust.setCharacterEncoding解码无效.
  19. *只有解码了getDownloadFile()方法才能在下载目录下正确找到请求的文件
  20. */
  21. fname=newString(fname.getBytes("ISO-8859-1"),"utf-8");
  22. frealname=newString(frealname.getBytes("ISO-8859-1"),"utf-8");
  23. }catch(UnsupportedEncodingExceptione){
  24. e.printStackTrace();
  25. }
  26. this.fileName=fname;
  27. this.fileRealName=frealname;
  28. }
  29. /*
  30. *@getFileName此方法对应的是struts.xml文件中的:
  31. *<paramname="contentDisposition">attachment;filename="${fileName}"</param>
  32. *这个属性设置的是下载工具下载文件时显示的文件名、要想正确的显示中文文件名,
  33. *我们需要对fileName再次编码
  34. *否则中文名文件将出现乱码、或无法下载情况
  35. *@return
  36. */
  37. publicStringgetFileName(){
  38. try{
  39. fileRealName=newString(fileRealName.getBytes(),"ISO-8859-1");
  40. }catch(UnsupportedEncodingExceptione){
  41. e.printStackTrace();
  42. }
  43. returnfileRealName;
  44. }
  45. /*
  46. *@getDownloadFile此方法对应的是Struts.xml文件中的:
  47. *<paramname="inputName">downloadFile</param>
  48. *返回下载文件的流、可以参看Struts2的源码
  49. */
  50. publicInputStreamgetDownloadFile(){
  51. this.setFileName();
  52. returnServletActionContext.getServletContext().getResourceAsStream("/"+"images/"+fileRealName);
  53. }
  54. @Override
  55. publicStringexecute()throwsException{
  56. returnSUCCESS;
  57. }
  58. }

上传jsp页面:

  1. <%@pagelanguage="java"import="java.util.*"pageEncoding="UTF-8"%>
  2. <%
  3. Stringpath=request.getContextPath();
  4. StringbasePath=request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
  5. %>
  6. <!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN">
  7. <html>
  8. <head>
  9. <basehref="<%=basePath%>">
  10. <title>MyJSP'upload.jsp'startingpage</title>
  11. <metahttp-equiv="pragma"content="no-cache">
  12. <metahttp-equiv="cache-control"content="no-cache">
  13. <metahttp-equiv="expires"content="0">
  14. <metahttp-equiv="keywords"content="keyword1,keyword2,keyword3">
  15. <metahttp-equiv="description"content="Thisismypage">
  16. <!--
  17. <linkrel="stylesheet"type="text/css"href="styles.css"mce_href="styles.css">
  18. -->
  19. </head>
  20. <body>
  21. <formaction="upload.action"method="post"enctype="multipart/form-data">
  22. <table>
  23. <tr>
  24. <td>上传文件</td>
  25. <td>标题:<inputtype="text"name="uploadFileName"/>
  26. <inputtype="file"name="upload"/><br/>
  27. 标题:<inputtype="text"name="uploadFileName"/>
  28. <inputtype="file"name="upload"/><br/>
  29. 标题:<inputtype="text"name="uploadFileName"/>
  30. <inputtype="file"name="upload"/><br/>
  31. 标题:<inputtype="text"name="uploadFileName"/>
  32. <inputtype="file"name="upload"/><br/>
  33. 标题:<inputtype="text"name="uploadFileName"/>
  34. <inputtype="file"name="upload"/>
  35. </td>
  36. </tr>
  37. <tr>
  38. <td><inputtype="submit"value="提交"/></td>
  39. <td><inputtype="reset"value="重置"/></td>
  40. </tr>
  41. </table>
  42. </form>
  43. </body>
  44. </html>

下载jsp页面:

  1. <%@pagelanguage="java"import="java.util.*"pageEncoding="UTF-8"%>
  2. <%@taglibprefix="c"uri="http://java.sun.com/jsp/jstl/core"%>
  3. <%
  4. Stringpath=request.getContextPath();
  5. StringbasePath=request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
  6. %>
  7. <!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN">
  8. <html>
  9. <head>
  10. <basehref="<%=basePath%>">
  11. <title>MyJSP'download.jsp'startingpage</title>
  12. <metahttp-equiv="pragma"content="no-cache">
  13. <metahttp-equiv="cache-control"content="no-cache">
  14. <metahttp-equiv="expires"content="0">
  15. <metahttp-equiv="keywords"content="keyword1,keyword2,keyword3">
  16. <metahttp-equiv="description"content="Thisismypage">
  17. <!--
  18. <linkrel="stylesheet"type="text/css"href="styles.css"mce_href="styles.css">
  19. -->
  20. </head>
  21. <body>
  22. <c:forEachitems="${uploadFiles}"var="files">
  23. <imgsrc="images/${files.uploadRealName}"mce_src="images/${files.uploadRealName}"alt="ds"width="200px"height="300px"/>
  24. <ahref="download.action?name=${files.uploadFileName}&realname=${files.uploadRealName}"mce_href="download.action?name=${files.uploadFileName}&realname=${files.uploadRealName}">${files.uploadFileName}</a><br/>
  25. </c:forEach>
  26. </body>
  27. </html>
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics