现在的位置: 首页 > 综合 > 正文

struts2上传文件和下载文件

2013年10月06日 ⁄ 综合 ⁄ 共 21034字 ⁄ 字号 评论关闭

最近做项目遇到了文件上传的问题,我用的是开源strruts2,因为之前用的是apache的开源文件上传组件,所以对struts2的上传不太清楚,到网上google一下,才清楚struts2的上传的用法:

首先在actio中定义一个File类型的对象数组,数组名为file类型文本框的名称,用来保存文件域对象,定义一个字符串型数组,数组名为file类型文本框的名称+FileName,用来保存文件名,在定义一个字符串数组,名称为file类型文本框的名称+ContentTyp额,用来保存 上传的文件类型。

例子

 

jsp页面

  1. <%@ page contentType="text/html; charset=UTF-8" %> 
  2. <%@ taglib prefix="s" uri="/struts-tags" %> 
  3. <html> 
  4. <head> 
  5.     <title>Struts2 File Upload</title> 
  6. </head> 
  7. <body>   
  8. <s:text name=""></s:text> 
  9.     <form action="fileUpload.action" method="POST" enctype="multipart/form-data"
  10.  
  11.                  
  12.         文件标题:<input type="text" name="title" size="50"/><br/> 
  13.         选择文件:<input type="file" name="upload" size="50"/><br/> 
  14.         选择文件:<input type="file" name="upload" size="50"/><br/> 
  15.         选择文件:<input type="file" name="upload" size="50"/><br/> 
  16.        <input type="submit" value=" 上传 "/>         
  17.     </form> 
  18. </body> 
  19. </html> 

 

baseAction文件

Java代码 
  1. //pizza  
  2. package com.trendcom.upload.action;  
  3. import javax.servlet.ServletContext;  
  4. import javax.servlet.http.HttpServletRequest;  
  5. import javax.servlet.http.HttpServletResponse;
  6. import javax.servlet.http.HttpSession;  
  7.  
  8. import org.apache.struts2.ServletActionContext;
  9.  
  10. import com.opensymphony.xwork2.ActionSupport;  
  11.  
  12. public class BaseAction
    extends ActionSupport {  
  13.  
  14. public HttpServletRequest getRequest(){  
  15. return ServletActionContext.getRequest();  
  16. }  
  17.  
  18. public HttpServletResponse getResponse(){  
  19. return ServletActionContext.getResponse();  
  20. }  
  21.  
  22. public HttpSession getSession(){  
  23. return getRequest().getSession();  
  24. }  
  25.  
  26. public ServletContext getServletContext(){  
  27. return ServletActionContext.getServletContext();
  28. }  
  29.  
  30. public String getRealyPath(String path){  
  31. return getServletContext().getRealPath(path);  
  32. }  
  33. }  

action文件

Java代码 
  1. package com.trendcom.upload.action; 
  2.  
  3. import java.io.BufferedInputStream; 
  4. import java.io.BufferedOutputStream; 
  5. import java.io.File; 
  6. import java.io.FileInputStream; 
  7. import java.io.FileOutputStream; 
  8. import java.io.IOException; 
  9. import java.io.InputStream; 
  10. import java.io.OutputStream; 
  11. import java.util.ArrayList; 
  12. import java.util.List; 
  13.  
  14. public class UploadFileAction
    extends BaseAction { 
  15.     private static
    final int BUFFER_SIZE=16*1024
  16.     // 文件标题 
  17.     private String title; 
  18.     // 用File数组来封装多个上传文件域对象 
  19.     private File[] upload; 
  20.     // 用String数组来封装多个上传文件名 
  21.     private String[] uploadFileName; 
  22.     // 用String数组来封装多个上传文件类型 
  23.     private String[] uploadContentType; 
  24.     // 保存文件的目录路径(通过依赖注入) 
  25.     private String savePath; 
  26.     //以下为所有属性的getter和setter。省略。。。 
  27.     // 自己封装的一个把源文件对象复制成目标文件对象 
  28.     private static
    boolean  copy(File src, File dst) { 
  29.         boolean result=false
  30.         InputStream in = null
  31.         OutputStream out = null
  32.         try
  33.             in = new BufferedInputStream(new FileInputStream(src), BUFFER_SIZE); 
  34.             out = new BufferedOutputStream(new FileOutputStream(dst), 
  35.                     BUFFER_SIZE); 
  36.             byte[] buffer = new
    byte[BUFFER_SIZE]; 
  37.             int len = 0
  38.             while ((len = in.read(buffer)) >
    0) { 
  39.                 out.write(buffer, 0, len); 
  40.             } 
  41.             result=true
  42.         } catch (Exception e) { 
  43.             e.printStackTrace(); 
  44.             result=false
  45.         } finally
  46.             if (null != in) { 
  47.                 try
  48.                     in.close(); 
  49.                 } catch (IOException e) { 
  50.                     e.printStackTrace(); 
  51.                 } 
  52.             } 
  53.             if (null != out) { 
  54.                 try
  55.                     out.close(); 
  56.                 } catch (IOException e) { 
  57.                     e.printStackTrace(); 
  58.                 } 
  59.             } 
  60.         } 
  61.         return result; 
  62.     } 
  63.     @Override 
  64.     public String execute() throws Exception { 
  65.         File[] srcFiles = this.getUpload(); 
  66.         List<String> successFileList=new ArrayList<String>(); 
  67.         // 处理每个要上传的文件 
  68.         for (int i =
    0; i < srcFiles.length; i++) { 
  69.             // 根据服务器的文件保存地址和原文件名创建目录文件全路径 
  70.             String dstPath = getRealyPath(getSavePath()) 
  71.                     + "\\" + this.getUploadFileName()[i]; 
  72.             File dstFile = new File(dstPath); 
  73.             if(copy(srcFiles[i], dstFile)){ 
  74.                   successFileList.add(getUploadFileName()[i]); 
  75.             } 
  76.         } 
  77.         getRequest().setAttribute("successFileList", successFileList); 
  78.         return SUCCESS; 
  79.     } 
  80.      
  81.     public String getTitle() { 
  82.         return title; 
  83.     } 
  84.     public void setTitle(String title) { 
  85.         this.title = title; 
  86.     } 
  87.     public File[] getUpload() { 
  88.         return upload; 
  89.     } 
  90.     public void setUpload(File[] upload) { 
  91.         this.upload = upload; 
  92.     } 
  93.     public String[] getUploadFileName() { 
  94.         return uploadFileName; 
  95.     } 
  96.     public void setUploadFileName(String[] uploadFileName) { 
  97.         this.uploadFileName = uploadFileName; 
  98.     } 
  99.     public String[] getUploadContentType() { 
  100.         return uploadContentType; 
  101.     } 
  102.     public void setUploadContentType(String[] uploadContentType) { 
  103.         this.uploadContentType = uploadContentType; 
  104.     } 
  105.     public String getSavePath() { 
  106.         return savePath; 
  107.     } 
  108.     public void setSavePath(String savePath) { 
  109.         this.savePath = savePath; 
  110.     } 

配置文件

Java代码 
  1. <?xml version="1.0" encoding="UTF-8" ?> 
  2. <!DOCTYPE struts PUBLIC 
  3.         "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" 
  4.         "http://struts.apache.org/dtds/struts-2.0.dtd"
  5.  
  6. <struts>    
  7.       <package name="com.trendcom.upload.action"
    extends="struts-default"
  8.         <action name="fileUpload" 
    class="com.trendcom.upload.action.UploadFileAction"
  9.             <interceptor-ref name="fileUpload"
  10.               <!-- 配置允许上传的文件类型,多个用","分隔 --> 
  11.               <param name="allowedTypes"
  12.           image/bmp,image/png,image/gif,image/jpeg,image/jpg,image/x-png, image/pjpeg 
  13.               </param> 
  14.               <!-- 配置允许上传的文件大小,单位字节 --> 
  15.               <param name="maximumSize">102400</param> 
  16.            </interceptor-ref> 
  17.            <interceptor-ref name="defaultStack" /> 
  18.             <!-- 动态设置Action中的savePath属性的值 --> 
  19.             <param name="savePath">/upload</param> 
  20.                <result name="input">/index.jsp</result> 
  21.             <result name="success">/success.jsp</result> 
  22.         </action> 
  23.     </package
  24. </struts> 

所需lib包括(struts2基本包就不在这里列出来)

Java代码 
  1. commons-fileupload-1[1].2.jar 
  2. commons-io-1.4.jar 

上传类型.当中可能有些是旧的如果想查看struts2中的上传类型可以下载本文的附件.
FileUploadInterceptor
把FileUploadInterceptor.class代替struts2包中类后,就会在控制台中输出所上传的文件是什么类型

Java代码 
  1. Description of Data Content Typical Filename Extensions  
  2.   
  3.  
  4. MIME type/subtype  
  5.          
  6. Text and Text-Related Types         
  7. HTML text data (RFC 1866) html htm    text/html  
  8. Plain text: documents; program listings txt c c++ pl cc h   text/plain   
  9. Richtext (obsolete - replaced by text/enriched)      text/richtext   
  10. Structure enhanced text  (etx?)    text/x-setext  
  11. Enriched text markup (RFC 1896)     text/enriched  
  12. Tab-separated values (tabular) (tsv?)    text/tab-separated-values   
  13. SGML documents (RFC 1874)     text/sgml  
  14. Speech synthesis data (MVP Solutions)  talk   text/x-speech   
  15.          
  16. Document Stylesheet Types         
  17. Cascading Stylesheets  css    text/css  
  18. DSSSL-online stylesheets     application/dsssl (proposed)   
  19.          
  20. Image Types        
  21. GIF  gif   image/gif  
  22. X-Windows bitmap (b/w)  xbm    image/x-xbitmap  
  23. X-Windows pixelmap (8-bit color)  xpm    image/x-xpixmap  
  24. Portable Network Graphics png    image/x-png  
  25. Image Exchange Format (RFC 1314) ief    image/ief  
  26. JPEG  jpeg jpg jpe   image/jpeg  
  27. TIFF  tiff tif   image/tiff  
  28. RGB  rgb   image/rgb  
  29.       image/x-rgb   
  30. Group III Fax (RFC 1494) g3f    image/g3fax  
  31. X Windowdump format xwd   image/x-xwindowdump  
  32. Macintosh PICT format pict    image/x-pict  
  33. PPM (UNIX PPM package) ppm    image/x-portable-pixmap  
  34. PGM (UNIX PPM package) pgm    image/x-portable-graymap   
  35. PBM (UNIX PPM package) pbm    image/x-portable-bitmap  
  36. PNM (UNIX PPM package) pnm    image/x-portable-anymap  
  37. Microsoft Windows bitmap  bmp    image/x-ms-bmp  
  38. CMU raster  ras   image/x-cmu-raster  
  39. Kodak Photo-CD  pcd   image/x-photo-cd  
  40. Computer Graphics Metafile  cgm    image/cgm  
  41. North Am. Presentation Layer Protocol     image/naplps  
  42. CALS Type 1 or 2 mil cal    image/x-cals  
  43. Fractal Image Format (Iterated Systems)  fif   image/fif   
  44. QuickSilver active image (Micrografx)  dsf   image/x-mgx-dsf   
  45. CMX vector image (Corel) cmx    image/x-cmx  
  46. Wavelet-compressed (Summus) wi    image/wavelet  
  47. AutoCad Drawing (SoftSource) dwg    image/vnd.dwg  
  48.       image/x-dwg   
  49. AutoCad DXF file (SoftSource) dxf    image/vnd.dxf  
  50.       image/x-dxf   
  51. Simple Vector Format (SoftSource) svf   image/vnd.svf   
  52.       also vector/x-svf   
  53.          
  54. Audio/Voice/Music Related Types         
  55. "basic"audio - 8-bit u-law PCM au snd   audio/basic   
  56. Macintosh audio format (AIpple) aif aiff aifc    audio/x-aiff  
  57. Microsoft audio  wav    audio/x-wav  
  58. MPEG audio  mpa abs mpega    audio/x-mpeg  
  59. MPEG-2 audio mp2a mpa2    audio/x-mpeg-2  
  60. compressed speech (Echo Speech Corp.)  es   audio/echospeech   
  61. Toolvox speech audio (Voxware) vox    audio/voxware   
  62. RapidTransit compressed audio (Fast Man)  lcc   application/fastman   
  63. Realaudio (Progressive Networks) ra ram   application/x-pn-realaudio   
  64. NIFF music notation data format     application/vnd.music-niff   
  65. MIDI music data  mmid   x-music/x-midi  
  66. Koan music data (SSeyo) skp    application/vnd.koan  
  67.       application/x-koan   
  68. Speech synthesis data (MVP Solutions)  talk   text/x-speech   
  69.          
  70. Video Types        
  71. MPEG video mpeg mpg mpe   video/mpeg  
  72. MPEG-2 video mpv2 mp2v   video/mpeg-2  
  73. Macintosh Quicktime qt mov    video/quicktime  
  74. Microsoft video  avi   video/x-msvideo  
  75. SGI Movie format movie   video/x-sgi-movie  
  76. VDOlive streaming video (VDOnet) vdo   video/vdo   
  77. Vivo streaming video (Vivo software)  viv   video/vnd.vivo   
  78.       video/vivo   
  79. Special HTTP/Web Application Types         
  80. Proxy autoconfiguration (Netscape browsers)  pac   application/x-ns-proxy-autoconfig   
  81. See Chapter 6     application/x-www-form-urlencoded  
  82. See Chapter 9     application/x-www-local-exec  
  83. See Chapter 9 (Netscape extension)     multipart/x-mixed-replace   
  84. See Chapter 9 and Appendix B     multipart/form-data  
  85. Netscape Cooltalk chat data (Netscape)  ice   x-conference/x-cooltalk   
  86. Interactive chat (Ichat)     application/x-chat   
  87.          
  88. Application Types         
  89.          
  90. Text-Related        
  91. PostScript  ai eps ps   application/postscript  
  92. Microsoft Rich Text Format rtf    application/rtf  
  93. Adobe Acrobat PDF  pdf    application/pdf  
  94.       application/x-pdf   
  95. Maker Interchange Format (FrameMaker)  mif   application/vnd.mif   
  96.       application/x-mif   
  97. Troff document t tr roff   application/x-troff  
  98. Troff document with MAN macros man    application/x-troff-man  
  99. Troff document with ME macros me    application/x-troff-me  
  100. Troff document with MS macros ms    application/x-troff-ms  
  101. LaTeX document  latex   application/x-latex  
  102. Tex/LateX document tex   application/x-tex  
  103. GNU TexInfo document texinfo texi    application/x-texinfo  
  104. TeX dvi format  dvi   application/x-dvi  
  105. MacWrite document ??   application/macwriteii  
  106. MS word document ??   application/msword  
  107. WordPerfect 5.1 document ??    application/wordperfect5.1   
  108. SGML application (RFC 1874)     application/sgml  
  109. Office Document Architecture oda    application/oda   
  110. Envoy Document evy   application/envoy  
  111. Wang Info. Tranfer Format (Wang)     application/wita   
  112. DEC Document Transfer Format (DEC)     application/dec-dx   
  113. IBM Document Content Architecture (IBM)      application/dca-rft   
  114.          
  115. CommonGround Digital Paper (No Hands Software)      application/commonground   
  116. FrameMaker Documents (Frame) doc fm frm frame    application/vnd.framemaker   
  117.       application/x-framemaker   
  118. Remote printing at arbitrary printers (RFC 1486)      application/remote-printing   
  119.          
  120. Archive/Compressed Archives        
  121. Gnu tar format gtar   application/x-gtar  
  122. 4.3BSD tar format tar   application/x-tar  
  123. POSIX tar format ustar   application/x-ustar  
  124. Old CPIO format bcpio   application/x-bcpio  
  125. POSIX CPIO format cpio   application/x-cpio  
  126. UNIX sh shell archive shar    application/x-shar  
  127. DOS/PC - Pkzipped archive zip    application/zip  
  128. Macintosh Binhexed archive  hqx    application/mac-binhex40   
  129. Macintosh Stuffit Archive sit sea    application/x-stuffit  
  130. Fractal Image Format  fif    application/fractals  
  131. Binary, UUencoded bin uu   application/octet-stream  
  132. PC executable exe   application/octet-stream  
  133. WAIS "sources" src wsrc    application/x-wais-source   
  134. NCSA HDF data format hdf   application/hdf  
  135.          
  136. Downloadable Program/Scripts        
  137. Javascript program  js ls mocha    text/javascript   
  138.       application/x-javascript   
  139. VBScript program      text/vbscript  
  140. UNIX bourne shell program sh    application/x-sh  
  141. UNIX c-shell program csh   application/x-csh  
  142. Perl program pl   application/x-perl  
  143. Tcl (Tool Control Language) program tcl    application/x-tcl  
  144. Atomicmail program scripts (obsolete)      application/atomicmail   
  145. Slate documents - executable enclosures (BBN)      application/slate   
  146. Undefined binary data (often executable progs)      application/octet-stream   
  147. RISC OS Executable programs (ANT Limited)      application/riscos   
  148.          
  149. Animation/Multimedia        
  150. Andrew Toolkit inset     application/andrew-inset  
  151. FutureSplash vector animation (FutureWave)  spl   application/futuresplash   
  152. mBED multimedia data (mBED) mbd    application/mbedlet   
  153. Macromedia Shockwave (Macromedia)     application/x-director   
  154. Sizzler real-time video/animation     application/x-sprite   
  155. PowerMedia multimedia (RadMedia) rad   application/x-rad-powermedia   
  156.          
  157. Presentation         
  158. PowerPoint presentation (Microsoft) ppz   application/mspowerpoint   
  159. PointPlus presentation data (Net Scene)  css   application/x-pointplus   
  160. ASAP WordPower (Software Publishing Corp.)  asp   application/x-asap   
  161. Astound Web Player multimedia data (GoldDisk)  asn   application/astound   
  162. Special Embedded Object         
  163. OLE script e.g. Visual Basic (Ncompass)  axs   application/x-olescript   
  164. OLE Object (Microsoft/NCompass) ods   application/x-oleobject   
  165. OpenScape OLE/OCX objects (Business@Web)  opp   x-form/x-openscape   
  166. Visual Basic objects (Amara) wba    application/x-webbasic   
  167. Specialized data entry forms (Alpha Software)  frm   application/x-alpha-form   
  168. client-server objects (Wayfarer Communications)  wfx   x-script/x-wfxclient   
  169. General Applications        
  170. Undefined binary data (often executable progs)      application/octet-stream   
  171. CALS (U.S. D.O.D data format - RFC 1895)     application/cals-1840   
  172. Pointcast news data (Pointcast) pcn   application/x-pcn   
  173. Excel spreadsheet (Microsoft)     application/vnd.ms-excel   
  174.       application/x-msexcel   
  175.       application/ms-excel  
  176. PowerPoint (Microsoft) ppt    application/vnd.ms-powerpoint   
  177.       application/ms-powerpoint   
  178. Microsoft Project (Microsoft)     application/vnd.ms-project   
  179. Works data (Microsoft)     application/vnd.ms-works   
  180. MAPI data (Microsoft)     application/vnd.ms-tnef  
  181. Artgallery data (Microsoft)     application/vnd.artgalry   
  182. SourceView document (Dataware Electronics)  svd   application/vnd.svd   
  183. Truedoc (Bitstream)     application/vnd.truedoc  
  184. Net Install - software install (20/20 Software)  ins   application/x-net-install   
  185. Carbon Copy - remote control/access (Microcom)  ccv   application/ccv   
  186. Spreadsheets (Visual Components) vts   workbook/formulaone   
  187. Cybercash digital money (Cybercash)     application/cybercash   
  188. Format for sending generic Macintosh files     application/applefile   
  189. Active message -- connect to active mail app.      application/activemessage   
  190. X.400 mail message body part (RFC
    1494)     application/x400-bp   
  191. USENET news message id (RFC 1036)     application/news-message-id   
  192. USENET news message (RFC 1036)     application/news-transmission   
  193.          
  194. Multipart Types (mostly email)         
  195. Messages with multiple parts     multipart/mixed  
  196. Messages with multiple, alternative parts     multipart/alternative   
  197. Message with multiple, related parts      multipart/related  
  198. Multiple parts are digests     multipart/digest  
  199. For reporting of email status (admin.)     multipart/report   
  200. Order of parts does not matter     multipart/parallel  
  201. Macintosh file data     multipart/appledouble  
  202. Aggregate messages; descriptor as header     multipart/header-set   
  203. Container for voice-mail      multipart/voice-message  
  204. HTML FORM data (see Ch. 9 and App. B)     multipart/form-data  
  205. Infinite multiparts - See Chapter 9 (Netscape)      multipart/x-mixed-replace   
  206.          
  207. Message Types (mostly email)         
  208. MIME message     message/rfc822  
  209. Partial message     message/partial  
  210. Message containing external references     message/external-body   
  211. Message containing USENET news     message/news  
  212. HTTP message      message/http  
  213.          
  214. 2D/3D Data/Virtual Reality Types         
  215. VRML data file wrl vrml   x-world/x-vrml  
  216. (changing to model/vrml)  
  217.   
  218. WIRL - VRML data (VREAM) vrw    x-world/x-vream  
  219. Play3D 3d scene data (Play3D) p3d    application/x-p3d   
  220. Viscape Interactive 3d world data (Superscape)  svr   x-world/x-svr   
  221. WebActive 3d data (Plastic Thought)  wvr   x-world/x-wvr   
  222. QuickDraw3D scene data (Apple) 3dmf   x-world/x-3dmf   
  223.          
  224. Scientific/Math/CAD Types         
  225. Chemical types -- to communicate information about chemical models      chemical/* (several subtypes)   
  226. Mathematica notebook ma   application/mathematica  
  227. Computational meshes for numerical simulations  msh   x-model/x-mesh  
  228. (evolving to model/mesh)  
  229.   
  230. Vis5D 5-dimensional data  v5d    application/vis5d  
  231. IGES models -- CAD/CAM (CGM) data  igs    application/iges  
  232. (evolving to model/iges?)  
  233.   
  234. Autocad WHIP vector drawings dwf    drawing/x-dwf  
  235.          
  236.  
  237. Largely Platform-Specific Types         
  238.  
  239. Silicon Graphics Specific Types         
  240. Showcase Presentations showcase slides sc sho show    application/x-showcase  
  241. Insight Manual pages ins insight    application/x-insight  
  242. Iris Annotator data ano   application/x-annotator  
  243. Directory Viewer dir   application/x-dirview  
  244. Software License  lic   application/x-enterlicense  
  245. Fax manager file faxmgr   application/x-fax-manager   
  246. Fax job data file faxmgrjob    application/x-fax-manager-job   
  247. IconBook data icnbk   application/x-iconbook  
  248. ? wb   application/x-inpview  
  249. Installable software in 'inst' format inst    application/x-install  
  250. Mail folder mail   application/x-mailfolder  
  251. ? pp ppages   application/x-ppages  
  252. Data for printer (via lpr) sgi-lpr    application/x-sgi-lpr  
  253. Software in 'tardist' format tardist    application/x-tardist  
  254. Software in compressed 'tardist' format ztardist   application/x-ztardist   
  255. WingZ spreadsheet wkz   application/x-wingz  
  256. Open Inventor 3-D scenes  iv    graphics/x-inventor  

 

 

抱歉!评论已关闭.