struts2上传的Web文件ContentType类型大全
- 格式:docx
- 大小:19.58 KB
- 文档页数:8
1.web.xml文件主要完成对StrutsPrepareAndExecuteFilter的配置(在以前的版本中是对FilterDispatcher配置,新版本同样支持用FilterDispatcher配置),它的实质是一个过滤器,它负责初始化整个Struts框架并且处理所有的请求。
这个过滤器可以包括一些初始化参数,有的参数指定了要加载哪些额外的xml 配置文件,还有的会影响struts框架的行为。
除了StrutsPrepareAndExecuteFilter外,Struts还提供了一个ActionContexCleanUp类,它的主要任务是当有其它一些过滤器要访问一个初始化好了的struts框架的时候,负责处理一些特殊的清除任务。
2.struts.xml文件框架的核心配置文件就是这个默认的struts.xml文件,在这个默认的配置文件里面我们可以根据需要再包括其它一些配置文件。
在通常的应用开发中,我们可能想为每个不同的模块单独配置一个struts.xml文件,这样也利于管理和维护。
这也是我们要配置的主要文件3.struts.properties(参default.properties)在Struts框架使用了很多属性,我们可以通过改变这些属性来满足我们的需求。
要改变这些属性,只需在struts.properties文件中指定属性的key和value即可。
属性文件可以放在任何一个包含在classpath中的路径上,但是通常我们都把它放在/WEB-INF/classes目录下面。
我们可以在struts-default.properties文件中找到一个属性的列表。
4.struts-default.xml此文件是struts2框架默认加载的配置文件,它定义了struts2一些核心bean和拦截器,它会自动包含(included)到struts.xml文件中(实质是通过<package extends="struts-default">),并为我们提供了一些标准的配置。
'.a':'application/octet-stream', '.ai':'application/postscript', '.aif':'audio/x-aiff','.aifc':'audio/x-aiff','.aiff':'audio/x-aiff','.au':'audio/basic','.avi':'video/x-msvideo','.bat':'text/plain','.bcpio':'application/x-bcpio', '.bin':'application/octet-stream', '.bmp':'image/x-ms-bmp','.c':'text/plain',#Duplicates:('.cdf':'application/x-cdf','.cdf':'application/x-netcdf', '.cpio':'application/x-cpio','.csh':'application/x-csh','.css':'text/css','.dll':'application/octet-stream', '.doc':'application/msword', '.dot':'application/msword', '.dvi':'application/x-dvi','.eml':'message/rfc822','.eps':'application/postscript', '.etx':'text/x-setext','.exe':'application/octet-stream', '.gif':'image/gif','.gtar':'application/x-gtar','.h':'text/plain','.hdf':'application/x-hdf','.htm':'text/html','.html':'text/html','.ief':'image/ief','.jpe':'image/jpeg','.jpeg':'image/jpeg','.jpg':'image/jpeg','.js':'application/x-javascript', '.ksh':'text/plain','.latex':'application/x-latex','.m1v':'video/mpeg','.man':'application/x-troff-man', '.me':'application/x-troff-me', '.mht':'message/rfc822','.mhtml':'message/rfc822','.mov':'video/quicktime','.movie':'video/x-sgi-movie','.mp2':'audio/mpeg','.mp3':'audio/mpeg','.mpa':'video/mpeg','.mpe':'video/mpeg','.mpeg':'video/mpeg','.mpg':'video/mpeg','.ms':'application/x-troff-ms','.nc':'application/x-netcdf','.nws':'message/rfc822','.o':'application/octet-stream','.obj':'application/octet-stream','.oda':'application/oda','.p12':'application/x-pkcs12','.p7c':'application/pkcs7-mime','.pbm':'image/x-portable-bitmap', '.pdf':'application/pdf','.pfx':'application/x-pkcs12','.pgm':'image/x-portable-graymap', '.pl':'text/plain','.png':'image/png','.pnm':'image/x-portable-anymap', '.pot':'application/vnd.ms-powerpoint', '.ppa':'application/vnd.ms-powerpoint', '.ppm':'image/x-portable-pixmap', '.pps':'application/vnd.ms-powerpoint', '.ppt':'application/vnd.ms-powerpoint', '.ps':'application/postscript','.pwz':'application/vnd.ms-powerpoint', '.py':'text/x-python','.pyc':'application/x-python-code', '.pyo':'application/x-python-code', '.qt':'video/quicktime','.ra':'audio/x-pn-realaudio','.ram':'application/x-pn-realaudio', '.ras':'image/x-cmu-raster','.rdf':'application/xml','.rgb':'image/x-rgb','.roff':'application/x-troff','.rtx':'text/richtext','.sgm':'text/x-sgml','.sgml':'text/x-sgml','.shar':'application/x-shar','.snd':'audio/basic','.so':'application/octet-stream','.src':'application/x-wais-source','.sv4cpio':'application/x-sv4cpio','.sv4crc':'application/x-sv4crc','.swf':'application/x-shockwave-flash','.t':'application/x-troff','.tar':'application/x-tar','.tcl':'application/x-tcl','.tex':'application/x-tex','.texi':'application/x-texinfo','.texinfo':'application/x-texinfo','.tif':'image/tiff','.tiff':'image/tiff','.tr':'application/x-troff','.tsv':'text/tab-separated-values','.txt':'text/plain','.ustar':'application/x-ustar','.vcf':'text/x-vcard','.wav':'audio/x-wav','.wiz':'application/msword','.wsdl':'application/xml','.xbm':'image/x-xbitmap','.xlb':'application/vnd.ms-excel',#Duplicates:('.xls':'application/excel','.xls':'application/vnd.ms-excel','.xml':'text/xml','.xpdl':'application/xml','.xpm':'image/x-xpixmap','.xsl':'application/xml','.xwd':'image/x-xwindowdump','.zip':'application/zip',firefox和ie的文件类型区别Java代码firefox image/jpeg image/bmp image/gif image/png ie6image/pjpeg image/bmp image/gif image/x-pngie7image/pjpeg image/bmp image/gif image/x-pngie8image/pjpeg image/bmp image/gif image/x-png1.IE下载Office2007文件时在下载对话框中变成ZIP文件问题的解决2.3.4.从IIS或者Tomcat之类的Web服务器通过二进制流下载文件时(比如通过设置Header为Content-disposition:inline),如果被下载的文件是Office2007的dotx,docx,pot等后缀的时候,下载对话框中的图标会变成ZIP的,相应的文件名也会成为zip为扩展后缀的文件。
struts2是根据contentType来限制的,并不是文件的扩展名比如我想仅上传image/png,image/gif,image/jpeg这三种文件类型第一种方法是通过javascript校验来限制,这个比较简单,获取input的value 然后截取扩展名进行判断即可第二种是根据struts2自带的fileupload拦截器中提供的allowedTypes来进行限制,步骤如下:1 配置fileupload拦截器struts2的defaultStack中已经含有fileupload拦截器,如果想加入allowedTypes 参数,需要从新写一个defaultstack ,拷贝过来修改一下即可:<interceptor-stack name="myDefaultStack"><interceptor-ref name="exception"/><interceptor-ref name="alias"/><interceptor-ref name="servletConfig"/><interceptor-ref name="i18n"/><interceptor-ref name="prepare"/><interceptor-ref name="chain"/><interceptor-ref name="debugging"/><interceptor-ref name="profiling"/><interceptor-ref name="scopedModelDriven"/><interceptor-ref name="modelDriven"/><interceptor-ref name="fileUpload"><param name="allowedTypes">image/png,image/gif,image/jpeg</param></interceptor-ref><interceptor-ref name="checkbox"/><interceptor-ref name="staticParams"/><interceptor-ref name="actionMappingParams"/><interceptor-ref name="params"><paramname="excludeParams">dojo\..*,^struts\..*</param></interceptor-ref><interceptor-ref name="conversionError"/><interceptor-ref name="validation"><paramname="excludeMethods">input,back,cancel,browse</param></interceptor-ref><interceptor-ref name="workflow"><paramname="excludeMethods">input,back,cancel,browse</param></interceptor-ref></interceptor-stack></interceptors><default-interceptor-refname="myDefaultStack"></default-interceptor-ref>仅修改代码中的<interceptor-ref name="fileUpload"><param name="allowedTypes">image/png,image/gif,image/jpeg</param></interceptor-ref>上面配置的是上传文件类型的限制,其实共有两个参数maximumSize (可选) - 这个拦截器允许的上传到action中的文件最大长度(以byte为单位). 注意这个参数和在webwork.properties中定义的属性没有关系,默认2MBallowedTypes (可选) - 以逗号分割的contentType类型列表(例如text/html),这些列表是这个拦截器允许的可以传到action中的contentType.如果没有指定就是允许任何上传类型.2 jsp页面定义如下(testFileUpload.jsp)<s:form action="testFileUpload" method="post"enctype="multipart/form-data"><s:file name="file"theme="simple"/><s:fielderror name="file"></s:fielderror><s:submit/></s:form>3 后台的action声明如下(我用的是struts2的注解进行action配置)public class TestFileUploadAction extends ActionSupport{private File file;private String fileContentType;private String fileFileName;@Action(value = "testFileUpload", results = {@Result(name = "input", location = "/testFileUpload.jsp"),@Result(name = "success", location ="/testFileUploadSuccess.jsp")})public String execute() {return SUCCESS;}get/set......}注意:如果jsp中file的name="xxx",那么后台action中的属性要做相应更改为private File xxx;private String xxxContentType;private String xxxFileName;同时注意大小写一定要一致4 定义错误文件类型的消息提示,这个需要用到struts2的资源文件,在struts.properties文件中加入struts.custom.i18n.resources=globalMessagesglobalMessages对应着资源文件名5 在源文件夹下定义资源文件globalMessages.properties,并在里面加入如下信息:struts.messages.error.content.type.not.allowed=upload file contenttype is invalidate这里稍作说明(拷贝一下struts2的帮助):如果你的action实现了ValidationAware接口(如果action继承了ActionSupport,那么就相当于实现了ValidationAware),这个拦截器就可以添加几种字段错误.这些错误信息是基于存储在struts-messages.properties文件中的一些i18n值,这个文件是所有i18n请求的默认文件.你可以在自己消息文件的复写以下key的消息文字struts.messages.error.uploading - 文件不能上传的通用错误信息rge - 上传文件长度过大的错误信息struts.messages.error.content.type.not.allowed - 当上传文件不符合指定的contentType以上配置完毕后,测试一下,对于非法的contentType,例如xxx.log这个文件的的contentType是pplication/octet-stream会给出提示:upload file contenttype is invalidate'.a' : 'application/octet-stream','.ai' : 'application/postscript','.aif' : 'audio/x-aiff','.aifc' : 'audio/x-aiff','.aiff' : 'audio/x-aiff','.au' : 'audio/basic','.avi' : 'video/x-msvideo','.bat' : 'text/plain','.bcpio' : 'application/x-bcpio','.bin' : 'application/octet-stream','.bmp' : 'image/x-ms-bmp','.c' : 'text/plain','.cdf' : 'application/x-cdf','.cdf' : 'application/x-netcdf','.cpio' : 'application/x-cpio','.csh' : 'application/x-csh','.css' : 'text/css','.dll' : 'application/octet-stream', '.doc' : 'application/msword', '.dot' : 'application/msword','.dvi' : 'application/x-dvi','.eml' : 'message/rfc822','.eps' : 'application/postscript', '.etx' : 'text/x-setext','.exe' : 'application/octet-stream', '.gif' : 'image/gif','.gtar' : 'application/x-gtar','.h' : 'text/plain','.hdf' : 'application/x-hdf','.htm' : 'text/html','.html' : 'text/html','.ief' : 'image/ief','.jpe' : 'image/jpeg','.jpeg' : 'image/jpeg','.jpg' : 'image/jpeg','.js' : 'application/x-javascript', '.ksh' : 'text/plain','.latex' : 'application/x-latex','.m1v' : 'video/mpeg','.man' : 'application/x-troff-man', '.me' : 'application/x-troff-me', '.mht' : 'message/rfc822','.mhtml' : 'message/rfc822','.mif' : 'application/x-mif','.mov' : 'video/quicktime','.movie' : 'video/x-sgi-movie','.mp2' : 'audio/mpeg','.mp3' : 'audio/mpeg','.mpa' : 'video/mpeg','.mpe' : 'video/mpeg','.mpeg' : 'video/mpeg','.mpg' : 'video/mpeg','.ms' : 'application/x-troff-ms', '.nc' : 'application/x-netcdf', '.nws' : 'message/rfc822','.o' : 'application/octet-stream','.obj' : 'application/octet-stream','.oda' : 'application/oda','.p12' : 'application/x-pkcs12','.p7c' : 'application/pkcs7-mime','.pbm' : 'image/x-portable-bitmap','.pdf' : 'application/pdf','.pfx' : 'application/x-pkcs12','.pgm' : 'image/x-portable-graymap', '.pl' : 'text/plain','.png' : 'image/png','.pnm' : 'image/x-portable-anymap', '.pot' : 'application/vnd.ms-powerpoint', '.ppa' : 'application/vnd.ms-powerpoint', '.ppm' : 'image/x-portable-pixmap','.pps' : 'application/vnd.ms-powerpoint', '.ppt' : 'application/vnd.ms-powerpoint', '.ps' : 'application/postscript','.pwz' : 'application/vnd.ms-powerpoint', '.py' : 'text/x-python','.pyc' : 'application/x-python-code','.pyo' : 'application/x-python-code','.qt' : 'video/quicktime','.ra' : 'audio/x-pn-realaudio','.ram' : 'application/x-pn-realaudio', '.ras' : 'image/x-cmu-raster','.rdf' : 'application/xml','.rgb' : 'image/x-rgb','.roff' : 'application/x-troff','.rtx' : 'text/richtext','.sgm' : 'text/x-sgml','.sgml' : 'text/x-sgml','.sh' : 'application/x-sh','.shar' : 'application/x-shar','.snd' : 'audio/basic','.so' : 'application/octet-stream','.src' : 'application/x-wais-source', '.sv4cpio': 'application/x-sv4cpio','.sv4crc' : 'application/x-sv4crc','.swf' : 'application/x-shockwave-flash', '.t' : 'application/x-troff','.tar' : 'application/x-tar','.tcl' : 'application/x-tcl','.tex' : 'application/x-tex','.texi' : 'application/x-texinfo','.texinfo': 'application/x-texinfo','.tif' : 'image/tiff','.tiff' : 'image/tiff','.tr' : 'application/x-troff','.tsv' : 'text/tab-separated-values', '.txt' : 'text/plain','.ustar' : 'application/x-ustar','.vcf' : 'text/x-vcard','.wav' : 'audio/x-wav','.wiz' : 'application/msword','.wsdl' : 'application/xml','.xbm' : 'image/x-xbitmap','.xlb' : 'application/vnd.ms-excel', '.xls' : 'application/excel','.xls' : 'application/vnd.ms-excel', '.xml' : 'text/xml','.xpdl' : 'application/xml','.xpm' : 'image/x-xpixmap','.xsl' : 'application/xml','.xwd' : 'image/x-xwindowdump', '.zip' : 'application/zip',。
文件上传与下载全解析struts的上传封装的已经非常完美了,首先我们来看一下页面<s:form action=""method="post"enctype ="multipart/form-data"><td height="32"class ="heder">上传档案:</td><td align="left"bgco lor="#FFFFFF"class="main2"><s:file name=" documentFile"/></td><td align="center"><input type="s ubmit"value="保存"class="button"onclick="return nextsubmit();"/></td></s:form>主要关注的就是<s:file name="documentFile"/> enctype ="multipart/form-data"在action中,我们来看private String documentFileContentType;private String documentFileFileName;private File documentFile;public String getDocumentFileContentType() {return documentFileContentType;}public void setDocumentFileContentType(String documentFileContentType) {= documentFileContentType;}public String getDocumentFileFileName() {return documentFileFileName;}public void setDocumentFileFileName(String documentFileFileName) { = documentFileFileName;}public File getDocumentFile() {return documentFile;}public void setDocumentFile(File documentFile) {= documentFile;}private void copy(File src, File dst) {InputStream in = null;OutputStream out = null;try{in = new BufferedInputStream( new FileInputStream( src));out = new BufferedOutputStream( new FileOutputStre am(dst));byte[] buffer = new byte[1024];while(buffer) > 0 )(buffer);();();}catch(Exception e) {();}}public String save(){if(!("")){String folder = ().getRealPath("/ archives");File rootDir = new File(folder);if(!())();String fileEx = (("."),());String fileRealName = (0, (".")) + (new Date().g etTime())+fileEx;String fileName = folder + "\" + fileRealName;copy(documentFile,new File(fileName));}return"success";}documentFileContentType; documentFileFileName; documentFile; 上传后这三个东西会自动注入进来,根据要求对文件名更改下,保存下好了,接着我们要提供下载,看看struts是怎么做的,网上关于这方面资料很少,就一个家伙把官方的showcase翻译下,我再完整的走一遍流程<s:url id="url"action="download"><s:param name="inputPath">/archives/<s:property value="loc"/></s:param></s:url><s:a href="%{url}">下载</s:a>在action中importimportimportimportimportpublic class FileDownloadAction implements Action {private String inputPath;public void setInputPath(String value) throws UnsupportedEncodingE xception {inputPath = new String("ISO-8859-1"),"UTF-8");}public InputStream getInputStream() throws Exception {return().getResourceAsStream(inputPath);}public String execute() throws Exception {String fileName = ("/")+1, ());().setHeader("Content-Disposition", "attachment; filename="+n ew String("gb2312"),"iso-8859-1"));return SUCCESS;}相应的XML配置<action name="download"class="FileDownloadAction"><result name="success"type="stream"><param name="inputName">inputStream</param><param name="bufferSize">4096</param></result></action>这里要注意,在action中 inputPath = new String("ISO-8859-1"),"UTF-8"); 需要转换下另外在setHeader("Content-Disposition", "attachment; filename="+new String("gb2312" ),"iso-8859-1"));这一步也是非常重要的。
下面是使用struts2文件上传框架时候支持的ContentType 的类型,拦截器配置项:allowedTypes 允许上传的文件类型maximumSize 允许上传的文件的大小,单位为字节错误信息提示:#更改上传文件类型不允许的提示信息struts.messages.error.content.type.not.allowed=文件上传失败:你要上传的文件类型不允许#更改上传文件太大的提示信息rge=文件上传失败:你要上传的文件太大#文件上传其它错误信息struts.messages.error.uploading=文件上传失败:发生内部错误Description of Data Content Typical Filename ExtensionsMIME type/subtype 文本类型Text and Text-Related TypesHTML text data (RFC 1866) html htm text/htmlPlain text: documents; program listings txt c c++ pl cc h text/plainRichtext (obsolete - replaced by text/enriched) text/richtextStructure enhanced text (etx) text/x-setextEnriched text markup (RFC 1896) text/enrichedTab-separated values (tabular) (tsv) text/tab-separated-valuesSGML documents (RFC 1874) text/sgmlSpeech synthesis data (MVP Solutions) talk text/x-speechDocument Stylesheet TypesCascading Stylesheets css text/cssDSSSL-online stylesheets application/dsssl (proposed)Image Types 图像类型GIF gif image/gifX-Windows bitmap (b/w) xbm image/x-xbitmapX-Windows pixelmap (8-bit color) xpm image/x-xpixmapPortable Network Graphics png image/x-pngImage Exchange Format (RFC 1314) ief image/iefJPEG jpeg jpg jpe image/jpeg 或image/pjpegTIFF tiff tif image/tiffRGB rgb image/rgb image/x-rgbGroup III Fax (RFC 1494) g3f image/g3faxX Windowdump format xwd image/x-xwindowdumpMacintosh PICT format pict image/x-pictPPM (UNIX PPM package) ppm image/x-portable-pixmapPGM (UNIX PPM package) pgm image/x-portable-graymapPBM (UNIX PPM package) pbm image/x-portable-bitmapPNM (UNIX PPM package) pnm image/x-portable-anymap Microsoft Windows bitmap bmp image/x-ms-bmpCMU raster ras image/x-cmu-rasterKodak Photo-CD pcd image/x-photo-cdComputer Graphics Metafile cgm image/cgmNorth Am. Presentation Layer Protocol image/naplpsCALS Type 1 or 2 mil cal image/x-calsFractal Image Format (Iterated Systems) fif image/fif QuickSilver active image (Micrografx) dsf image/x-mgx-dsf CMX vector image (Corel) cmx image/x-cmxWavelet-compressed (Summus) wi image/waveletAutoCad Drawing (SoftSource) dwg image/vnd.dwgimage/x-dwgAutoCad DXF file (SoftSource) dxf image/vnd.dxfimage/x-dxfSimple V ector Format (SoftSource) svf image/vnd.svfalso vector/x-svfAudio/V oice/Music Related Types 声音和视频类型"basic"audio - 8-bit u-law PCM au snd audio/basicMacintosh audio format (AIpple) aif aiff aifc audio/x-aiff Microsoft audio wav audio/x-wavMPEG audio mpa abs mpega audio/x-mpegMPEG-2 audio mp2a mpa2 audio/x-mpeg-2compressed speech (Echo Speech Corp.) es audio/echospeech Toolvox speech audio (V oxware) vox audio/voxware RapidTransit compressed audio (Fast Man) lcc application/fastman Realaudio (Progressive Networks) ra ram application/x-pn-realaudioNIFF music notation data format application/vnd.music-niff MIDI music data mmid x-music/x-midiKoan music data (SSeyo) skp application/vnd.koanapplication/x-koanSpeech synthesis data (MVP Solutions) talk text/x-speechVideo TypesMPEG video mpeg mpg mpe video/mpegMPEG-2 video mpv2 mp2v video/mpeg-2Macintosh Quicktime qt mov video/quicktimeMicrosoft video avi video/x-msvideoSGI Movie format movie video/x-sgi-movieVDOlive streaming video (VDOnet) vdo video/vdoVivo streaming video (Vivo software) viv video/vnd.vivo video/vivoSpecial HTTP/Web Application TypesProxy autoconfiguration (Netscape browsers) pac application/x-ns-proxy-autoconfigSee Chapter 6 application/x-www-form-urlencodedSee Chapter 9 application/x-www-local-execSee Chapter 9 (Netscape extension) multipart/x-mixed-replaceSee Chapter 9 and Appendix B multipart/form-dataNetscape Cooltalk chat data (Netscape) ice x-conference/x-cooltalk Interactive chat (Ichat) application/x-chatApplication Types 应用程序类型Text-RelatedPostScript ai eps ps application/postscriptMicrosoft Rich Text Format rtf application/rtfAdobe Acrobat PDF pdf application/pdfapplication/x-pdfMaker Interchange Format (FrameMaker) mif application/vnd.mif application/x-mifTroff document t tr roff application/x-troffTroff document with MAN macros man application/x-troff-manTroff document with ME macros me application/x-troff-meTroff document with MS macros ms application/x-troff-msLaTeX document latex application/x-latexTex/LateX document tex application/x-texGNU TexInfo document texinfo texi application/x-texinfoTeX dvi format dvi application/x-dviMacWrite document application/macwriteiiMS word document application/mswordWordPerfect 5.1 document application/wordperfect5.1SGML application (RFC 1874) application/sgmlOffice Document Architecture oda application/odaEnvoy Document evy application/envoyWang Info. Tranfer Format (Wang) application/witaDEC Document Transfer Format (DEC) application/dec-dxIBM Document Content Architecture (IBM) application/dca-rftCommonGround Digital Paper (No Hands Software)application/commongroundFrameMaker Documents (Frame) doc fm frm frameapplication/vnd.framemakerapplication/x-framemakerRemote printing at arbitrary printers (RFC 1486)application/remote-printingArchive/Compressed Archives 档案类型Gnu tar format gtar application/x-gtar4.3BSD tar format tar application/x-tarPOSIX tar format ustar application/x-ustarOld CPIO format bcpio application/x-bcpioPOSIX CPIO format cpio application/x-cpioUNIX sh shell archive shar application/x-sharDOS/PC - Pkzipped archive zip application/zipMacintosh Binhexed archive hqx application/mac-binhex40 Macintosh Stuffit Archive sit sea application/x-stuffitFractal Image Format fif application/fractalsBinary, UUencoded bin uu application/octet-streamPC executable exe application/octet-streamWAIS "sources" src wsrc application/x-wais-sourceNCSA HDF data format hdf application/hdfDownloadable Program/Scripts 编程语言代码/脚本Javascript program js ls mocha text/javascriptapplication/x-javascriptVBScript program text/vbscriptUNIX bourne shell program sh application/x-shUNIX c-shell program csh application/x-cshPerl program pl application/x-perlTcl (Tool Control Language) program tcl application/x-tcl Atomicmail program scripts (obsolete) application/atomicmail Slate documents - executable enclosures (BBN) application/slateUndefined binary data (often executable progs) application/octet-streamRISC OS Executable programs (ANT Limited) application/riscosAnimation/MultimediaAndrew Toolkit inset application/andrew-insetFutureSplash vector animation (FutureWave) splapplication/futuresplashmBED multimedia data (mBED) mbd application/mbedlet Macromedia Shockwave (Macromedia) application/x-directorSizzler real-time video/animation application/x-spritePowerMedia multimedia (RadMedia) rad application/x-rad-powermediaPresentationPowerPoint presentation (Microsoft) ppz application/mspowerpoint PointPlus presentation data (Net Scene) css application/x-pointplusASAP WordPower (Software Publishing Corp.) asp application/x-asap Astound Web Player multimedia data (GoldDisk) asnapplication/astoundSpecial Embedded ObjectOLE script e.g. V isual Basic (Ncompass) axs application/x-olescriptOLE Object (Microsoft/NCompass) ods application/x-oleobject OpenScape OLE/OCX objects (Business@Web) opp x-form/x-openscape Visual Basic objects (Amara) wba application/x-webbasicSpecialized data entry forms (Alpha Software) frm application/x-alpha-formclient-server objects (Wayfarer Communications) wfx x-script/x-wfxclientGeneral ApplicationsUndefined binary data (often executable progs) application/octet-streamCALS (U.S. D.O.D data format - RFC 1895) application/cals-1840 Pointcast news data (Pointcast) pcn application/x-pcnExcel spreadsheet (Microsoft) application/vnd.ms-excelapplication/x-msexcelapplication/ms-excelPowerPoint (Microsoft) ppt application/vnd.ms-powerpointapplication/ms-powerpointMicrosoft Project (Microsoft) application/vnd.ms-projectWorks data (Microsoft) application/vnd.ms-worksMAPI data (Microsoft) application/vnd.ms-tnefArtgallery data (Microsoft) application/vnd.artgalrySourceV iew document (Dataware Electronics) svd application/vnd.svdTruedoc (Bitstream) application/vnd.truedocNet Install - software install (20/20 Software) ins application/x-net-installCarbon Copy - remote control/access (Microcom) ccv application/ccvSpreadsheets (V isual Components) vts workbook/formulaone Cybercash digital money (Cybercash) application/cybercashFormat for sending generic Macintosh files application/applefile Active message -- connect to active mail app.application/activemessageX.400 mail message body part (RFC 1494) application/x400-bp USENET news message id (RFC 1036) application/news-message-id USENET news message (RFC 1036) application/news-transmissionMultipart Types (mostly email)Messages with multiple parts multipart/mixedMessages with multiple, alternative parts multipart/alternative Message with multiple, related parts multipart/relatedMultiple parts are digests multipart/digestFor reporting of email status (admin.) multipart/reportOrder of parts does not matter multipart/parallelMacintosh file data multipart/appledoubleAggregate messages; descriptor as header multipart/header-set Container for voice-mail multipart/voice-messageHTML FORM data (see Ch. 9 and App. B) multipart/form-data Infinite multiparts - See Chapter 9 (Netscape) multipart/x-mixed-replaceMessage Types (mostly email)MIME message message/rfc822Partial message message/partialMessage containing external references message/external-body Message containing USENET news message/newsHTTP message message/http2D/3D Data/Virtual Reality TypesVRML data file wrl vrml x-world/x-vrml(changing to model/vrml)WIRL - VRML data (VREAM) vrw x-world/x-vreamPlay3D 3d scene data (Play3D) p3d application/x-p3dViscape Interactive 3d world data (Superscape) svr x-world/x-svr WebActive 3d data (Plastic Thought) wvr x-world/x-wvr QuickDraw3D scene data (Apple) 3dmf x-world/x-3dmfScientific/Math/CAD TypesChemical types -- to communicate information about chemical modelschemical/* (several subtypes)Mathematica notebook ma application/mathematicaComputational meshes for numerical simulations msh x-model/x-mesh (evolving to model/mesh)Vis5D 5-dimensional data v5d application/vis5dIGES models -- CAD/CAM (CGM) data igs application/iges (evolving to model/iges)Autocad WHIP vector drawings dwf drawing/x-dwfLargely Platform-Specific TypesSilicon Graphics Specific TypesShowcase Presentations showcase slides sc sho show application/x-showcaseInsight Manual pages ins insight application/x-insightIris Annotator data ano application/x-annotatorDirectory V iewer dir application/x-dirviewSoftware License lic application/x-enterlicenseFax manager file faxmgr application/x-fax-managerFax job data file faxmgrjob application/x-fax-manager-jobIconBook data icnbk application/x-iconbookwb application/x-inpviewInstallable software in 'inst' format inst application/x-installMail folder mail application/x-mailfolderpp ppages application/x-ppagesData for printer (via lpr) sgi-lpr application/x-sgi-lprSoftware in 'tardist' format tardist application/x-tardistSoftware in compressed 'tardist' format ztardist application/x-ztardistWingZ spreadsheet wkz application/x-wingzOpen Inventor 3-D scenes iv graphics/x-inventor下载参数result参数设置contentType 文件类别inputName 选用方法contentDispositionbufferSize缓存大小范例<result type="stream"><param name="contentType">application/octet-stream;charset=ISO-8859-1 </param><param name="inputName">inputStream</param><param name="contentDisposition">attachment;filename="${realFileName}"</param><param name="bufferSize">4096</param></result>。
Struts 2是通过Commons FileUpload文件上传。
Commons FileUpload通过将HTTP的数据保存到临时文件夹,然后Struts使用fileUpload拦截器将文件绑定到Action的实例中。
从而我们就能够以本地文件方式的操作浏览器上传的文件.具体实现前段时间Apache发布了Struts 2。
0.6 GA,所以本文的实现是以该版本的Struts作为框架的.以下是例子所依赖类包的列表:清单1 依赖类包的列表首先,创建文件上传页面FileUpload。
jsp,内容如下:<%@ page language="java"contentType="text/html;charset=utf-8" pageEncoding=”utf-8"%〉〈%@ taglib prefix=”s"uri="/struts—tags"%>〈!DOCTYPE html PUBLIC ”-//W3C//DTD XHTML 1。
0 Transitional//EN” "http://www。
w3。
org/TR/xhtml1/DTD/xhtml1—transitional。
dtd"〉<html xmlns="http://www。
w3。
org/1999/xhtml"〉〈head〉〈title〉Struts 2 File Upload〈/title〉〈/head〉〈body〉<s:form action="fileUpload”method="POST"enctype="multipart/form-d ata"〉〈s:file name="myFile"label="Image File”/〉<s:textfield name=”caption”label=”Caption”/><s:submit />〈/s:form></body〉</html>清单2 FileUpload。
一、web.xml配置文件任何MVC框架都需要与Web应用整合,这就不得不借助于web.xml文件,只有配置在web.xml文件中Servlet才会被应用加载。
所有的MVC框架都需要web应用加载一个核心控制器,对于Struts2框架而言,需要加载FilterDispatche r,只要Web应用负责加载FilterDispatc her,FilterDispatc her将会加载饮用的Str uts2框架。
配置FilterDispatc her的代码片段如下:-------------------------------------web.xm l------------------------------------------------------------------- <?xml version="1.0"encoding="UTF-8"?><web-app xmlns:xsi="/2001/XMLSchema-instance"xmlns="/xml/ns/javaee"xmlns:web="/xml/ns/javaee/web-app_2_5.xsd"xsi:schemaLocation="/xml/ns/javaee/xml/ns/javaee/web-app_2_5.xsd"id="WebApp_ID"version="2.5"><!-- 配置Struts2框架的核心Filter --><filter><!-- 配置Struts2核心Filter的名字 --><filter-name>struts2</filter-name><!-- 配置Struts2核心Filter的实现类 --><filter-class>org.apache.struts2.dispatcher.FilterDispatcher</f ilter-class></filter><!-- 配置Filter拦截的URL --><filter-mapping><!-- 配置Struts2核心FilterDispatcher拦截所有用户请求 --><filter-name>struts2</filter-name><url-pattern>/*</url-pattern></filter-mapping></web-app>-------------------------------------------------------------------------------------------------------------------- 二、struts.properties配置文件Struts2框架有两个核心配置文件,其中struts.xml文件主要负责管理应用中的Action映射,以及该Action包含的Result定义等。
一、上传页面:<%@ page language="java" contentType="text/html; charset=GBK"%><%@taglib prefix="s" uri="/struts-tags"%><html xmlns="/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=GBK" /><title>使用数组上传多个文件</title></head><body><s:fielderror/><form action="upload.action" method="post" enctype="multipart/form-data">文件标题:<input type="text" name="title" /><br>选择第一个文件:<input type="file" name="upload" /><br>选择第二个文件:<input type="file" name="upload" /><br>选择第三个文件:<input type="file" name="upload" /><br><input value="上传" type="submit" /></form></body></html>二、上传成功页面:<%@ page language="java" contentType="text/html; charset=GBK"%><%@taglib prefix="s" uri="/struts-tags"%><html><head><title>上传成功</title></head><body>上传成功!<br>文件标题:<s:property value=" + title"/><br>第一个文件为:<img src="<s:property value="'upload/' + uploadFileName[0]"/>"/><br>第二个文件为:<img src="<s:property value="'upload/' + uploadFileName[1]"/>"/><br> 第三个文件为:<img src="<s:property value="'upload/' + uploadFileName[2]"/>"/><br></body></html>三、动作类package lee;import com.opensymphony.xwork2.Action;import org.apache.struts2.ServletActionContext;import java.io.File;import java.io.*;import com.opensymphony.xwork2.ActionSupport;/*** @author yeeku.H.lee kongyeeku@* @version 1.0* Copyright (C), 2005-2008, yeeku.H.Lee* This program is protected by copyright laws.* Program Name:* Date:*/public class UploadAction extends ActionSupport{private String title;private File[] upload;private String[] uploadContentType;private String[] uploadFileName;//接受依赖注入的属性private String savePath;//接受依赖注入的方法public void setSavePath(String value){this.savePath = value;}private String getSavePath() throws Exception{returnServletActionContext.getRequest().getRealPath(savePath);}public void setTitle(String title) {this.title = title;}public void setUpload(File[] upload) {this.upload = upload;}public void setUploadContentType(String[] uploadContentType) { this.uploadContentType = uploadContentType;}public void setUploadFileName(String[] uploadFileName) {this.uploadFileName = uploadFileName;}public String getTitle() {return (this.title);}public File[] getUpload() {return (this.upload);}public String[] getUploadContentType() {return (this.uploadContentType);}public String[] getUploadFileName() {return (this.uploadFileName);}@Overridepublic String execute() throws Exception{File[] files = getUpload();for (int i = 0 ; i < files.length ; i++){//以服务器的文件保存地址和原文件名建立上传文件输出流FileOutputStream fos = newFileOutputStream(getSavePath() + "\\" + getUploadFileName()[i]);FileInputStream fis = newFileInputStream(files[i]);byte[] buffer = new byte[1024];int len = 0;while ((len = fis.read(buffer)) > 0){fos.write(buffer , 0 , len);}}fos.close();// 注意:流应当关闭。
struts2上传的Web文件ContentType类型大全".*"="application/octet-stream"".001"="application/x-001"".301"="application/x-301"".323"="text/h323"".906"="application/x-906"".907"="drawing/907"".a11"="application/x-a11"".acp"="audio/x-mei-aac"".ai"="application/postscript"".aif"="audio/aiff"".aifc"="audio/aiff"".aiff"="audio/aiff"".anv"="application/x-anv"".asa"="text/asa"".asf"="video/x-ms-asf"".asp"="text/asp"".asx"="video/x-ms-asf"".au"="audio/basic"".avi"="video/avi"".awf"="application/vnd.adobe.workflow"".biz"="text/xml"".bmp"="application/x-bmp"".bot"="application/x-bot"".c4t"="application/x-c4t"".c90"="application/x-c90"".cal"="application/x-cals"".cat"="application/vnd.ms-pki.seccat"".cdf"="application/x-netcdf"".cdr"="application/x-cdr"".cel"="application/x-cel"".cer"="application/x-x509-ca-cert"".cg4"="application/x-g4"".cgm"="application/x-cgm"".cit"="application/x-cit"".class"="java/*"".cml"="text/xml"".cmp"="application/x-cmp"".cmx"="application/x-cmx"".crl"="application/pkix-crl"".crt"="application/x-x509-ca-cert" ".csi"="application/x-csi"".css"="text/css"".cut"="application/x-cut"".dbf"="application/x-dbf"".dbm"="application/x-dbm"".dbx"="application/x-dbx"".dcd"="text/xml"".dcx"="application/x-dcx"".der"="application/x-x509-ca-cert" ".dgn"="application/x-dgn"".dib"="application/x-dib"".dll"="application/x-msdownload" ".doc"="application/msword"".dot"="application/msword"".drw"="application/x-drw"".dtd"="text/xml"".dwf"="Model/vnd.dwf"".dwf"="application/x-dwf"".dwg"="application/x-dwg"".dxb"="application/x-dxb"".dxf"="application/x-dxf"".edn"="application/vnd.adobe.edn" ".emf"="application/x-emf"".eml"="message/rfc822"".ent"="text/xml"".epi"="application/x-epi"".eps"="application/x-ps"".eps"="application/postscript"".etd"="application/x-ebx"".exe"="application/x-msdownload" ".fax"="image/fax"".fdf"="application/vnd.fdf"".fif"="application/fractals"".fo"="text/xml"".frm"="application/x-frm"".g4"="application/x-g4"".gbr"="application/x-gbr"".gcd"="application/x-gcd"".gif"="image/gif"".gl2"="application/x-gl2"".gp4"="application/x-gp4"".hmr"="application/x-hmr"".hpg"="application/x-hpgl"".hpl"="application/x-hpl"".hqx"="application/mac-binhex40" ".hrf"="application/x-hrf"".hta"="application/hta"".htc"="text/x-component"".htm"="text/html"".html"="text/html"".htt"="text/webviewhtml"".htx"="text/html"".icb"="application/x-icb"".ico"="image/x-icon"".ico"="application/x-ico"".iff"="application/x-iff"".ig4"="application/x-g4"".igs"="application/x-igs"".iii"="application/x-iphone"".img"="application/x-img"".ins"="application/x-internet-signup" ".isp"="application/x-internet-signup" ".IVF"="video/x-ivf"".java"="java/*"".jfif"="image/jpeg"".jpe"="image/jpeg"".jpe"="application/x-jpe"".jpeg"="image/jpeg"".jpg"="image/jpeg"".jpg"="application/x-jpg"".js"="application/x-javascript"".jsp"="text/html"".la1"="audio/x-liquid-file"".lar"="application/x-laplayer-reg" ".latex"="application/x-latex"".lavs"="audio/x-liquid-secure"".lbm"="application/x-lbm"".lmsff"="audio/x-la-lms"".ls"="application/x-javascript"".ltr"="application/x-ltr"".m1v"="video/x-mpeg"".m2v"="video/x-mpeg"".m3u"="audio/mpegurl"".m4e"="video/mpeg4"".man"="application/x-troff-man"".math"="text/xml"".mdb"="application/msaccess"".mdb"="application/x-mdb"".mfp"="application/x-shockwave-flash" ".mht"="message/rfc822"".mhtml"="message/rfc822"".mi"="application/x-mi"".mid"="audio/mid"".midi"="audio/mid"".mil"="application/x-mil"".mml"="text/xml"".mnd"="audio/x-musicnet-download" ".mns"="audio/x-musicnet-stream" ".mocha"="application/x-javascript" ".movie"="video/x-sgi-movie"".mp1"="audio/mp1"".mp2"="audio/mp2"".mp2v"="video/mpeg"".mp3"="audio/mp3"".mp4"="video/mpeg4"".mpa"="video/x-mpg"".mpd"="application/vnd.ms-project" ".mpe"="video/x-mpeg"".mpeg"="video/mpg"".mpg"="video/mpg"".mpga"="audio/rn-mpeg"".mpp"="application/vnd.ms-project" ".mps"="video/x-mpeg"".mpt"="application/vnd.ms-project" ".mpv"="video/mpg"".mpv2"="video/mpeg"".mpw"="application/vnd.ms-project" ".mpx"="application/vnd.ms-project" ".mtx"="text/xml"".mxp"="application/x-mmxp"".net"="image/pnetvue"".nrf"="application/x-nrf"".nws"="message/rfc822"".odc"="text/x-ms-odc"".out"="application/x-out"".p10"="application/pkcs10"".p12"="application/x-pkcs12"".p7b"="application/x-pkcs7-certificates" ".p7c"="application/pkcs7-mime"".p7m"="application/pkcs7-mime"".p7r"="application/x-pkcs7-certreqresp" ".p7s"="application/pkcs7-signature" ".pc5"="application/x-pc5"".pci"="application/x-pci"".pcl"="application/x-pcl"".pcx"="application/x-pcx"".pdf"="application/pdf"".pdf"="application/pdf"".pdx"="application/vnd.adobe.pdx" ".pfx"="application/x-pkcs12"".pgl"="application/x-pgl"".pic"="application/x-pic"".pko"="application/vnd.ms-pki.pko" ".pl"="application/x-perl"".plg"="text/html"".pls"="audio/scpls"".plt"="application/x-plt"".png"="image/png"".png"="application/x-png"".pot"="application/vnd.ms-powerpoint" ".ppa"="application/vnd.ms-powerpoint" ".ppm"="application/x-ppm"".pps"="application/vnd.ms-powerpoint" ".ppt"="application/vnd.ms-powerpoint" ".ppt"="application/x-ppt"".pr"="application/x-pr"".prf"="application/pics-rules"".prn"="application/x-prn"".prt"="application/x-prt"".ps"="application/x-ps"".ps"="application/postscript"".ptn"="application/x-ptn"".pwz"="application/vnd.ms-powerpoint" ".r3t"="text/vnd.rn-realtext3d"".ra"="audio/vnd.rn-realaudio"".ram"="audio/x-pn-realaudio"".ras"="application/x-ras"".rat"="application/rat-file"".rdf"="text/xml"".rec"="application/vnd.rn-recording" ".red"="application/x-red"".rgb"="application/x-rgb"".rjs"="application/vnd.rn-realsystem-rjs"".rjt"="application/vnd.rn-realsystem-rjt"".rlc"="application/x-rlc"".rle"="application/x-rle"".rm"="application/vnd.rn-realmedia"".rmf"="application/vnd.adobe.rmf"".rmi"="audio/mid"".rmj"="application/vnd.rn-realsystem-rmj" ".rmm"="audio/x-pn-realaudio"".rmp"="application/vnd.rn-rn_music_package" ".rms"="application/vnd.rn-realmedia-secure" ".rmvb"="application/vnd.rn-realmedia-vbr" ".rmx"="application/vnd.rn-realsystem-rmx" ".rnx"="application/vnd.rn-realplayer"".rp"="image/vnd.rn-realpix"".rpm"="audio/x-pn-realaudio-plugin"".rsml"="application/vnd.rn-rsml"".rt"="text/vnd.rn-realtext"".rtf"="application/msword"".rtf"="application/x-rtf"".rv"="video/vnd.rn-realvideo"".sam"="application/x-sam"".sat"="application/x-sat"".sdp"="application/sdp"".sdw"="application/x-sdw"".sit"="application/x-stuffit"".slb"="application/x-slb"".sld"="application/x-sld"".slk"="drawing/x-slk"".smi"="application/smil"".smil"="application/smil"".smk"="application/x-smk"".snd"="audio/basic"".sol"="text/plain"".sor"="text/plain"".spc"="application/x-pkcs7-certificates"".spl"="application/futuresplash"".spp"="text/xml"".ssm"="application/streamingmedia"".sst"="application/vnd.ms-pki.certstore"".stl"="application/vnd.ms-pki.stl"".stm"="text/html"".sty"="application/x-sty"".svg"="text/xml"".swf"="application/x-shockwave-flash" ".tdf"="application/x-tdf"".tg4"="application/x-tg4"".tga"="application/x-tga"".tif"="image/tiff"".tif"="application/x-tif"".tiff"="image/tiff"".tld"="text/xml"".top"="drawing/x-top"".torrent"="application/x-bittorrent" ".tsd"="text/xml"".txt"="text/plain"".uin"="application/x-icq"".uls"="text/iuls"".vcf"="text/x-vcard"".vda"="application/x-vda"".vdx"="application/vnd.visio"".vml"="text/xml"".vpg"="application/x-vpeg005"".vsd"="application/vnd.visio"".vsd"="application/x-vsd"".vss"="application/vnd.visio"".vst"="application/vnd.visio"".vst"="application/x-vst"".vsw"="application/vnd.visio"".vsx"="application/vnd.visio"".vtx"="application/vnd.visio"".vxml"="text/xml"".wav"="audio/wav"".wax"="audio/x-ms-wax"".wb1"="application/x-wb1"".wb2"="application/x-wb2"".wb3"="application/x-wb3"".wbmp"="image/vnd.wap.wbmp"".wiz"="application/msword"".wk3"="application/x-wk3"".wk4"="application/x-wk4"".wkq"="application/x-wkq"".wks"="application/x-wks"".wm"="video/x-ms-wm"".wma"="audio/x-ms-wma"".wmd"="application/x-ms-wmd"".wmf"="application/x-wmf"".wml"="text/vnd.wap.wml"".wmv"="video/x-ms-wmv"".wmx"="video/x-ms-wmx"".wmz"="application/x-ms-wmz" ".wp6"="application/x-wp6"".wpd"="application/x-wpd"".wpg"="application/x-wpg"".wpl"="application/vnd.ms-wpl" ".wq1"="application/x-wq1"".wr1"="application/x-wr1"".wri"="application/x-wri"".wrk"="application/x-wrk"".ws"="application/x-ws"".ws2"="application/x-ws"".wsc"="text/scriptlet"".wsdl"="text/xml"".wvx"="video/x-ms-wvx"".xdp"="application/vnd.adobe.xdp" ".xdr"="text/xml"".xfd"="application/vnd.adobe.xfd" ".xfdf"="application/vnd.adobe.xfdf" ".xhtml"="text/html"".xls"="application/vnd.ms-excel" ".xls"="application/x-xls"".xlw"="application/x-xlw"".xml"="text/xml"".xpl"="audio/scpls"".xq"="text/xml"".xql"="text/xml"".xquery"="text/xml"".xsd"="text/xml"".xsl"="text/xml"".xslt"="text/xml"".xwd"="application/x-xwd"".x_b"="application/x-x_b"".x_t"="application/x-x_t。