IE上载Office2007文件时在上载对话框中变成ZIP文件有关问题的解决

来源:互联网 发布:mac 触摸板 右键 编辑:程序博客网 时间:2024/06/10 14:52

IE上载Office2007文件时在上载对话框中变成ZIP文件有关问题的解决


导致原因:

从IIS或者Tomcat之类的Web服务器通过二进制流下载文件时(比如通过设置Header为Content-disposition:inline),如果被下载的文件是Office2007的dotx,docx,pot等后缀的时候,下载对话框中的图标会变成ZIP的,相应的文件名也会成为zip为扩展后缀的文件。其实出现这样的情况,是由于IE中对下载文件类型的判断,假如找不到相应后缀的MIME的话,会自动根据数据流来判断文件的类型,而微软对Office2007的格式做了和以前完全不同的处理。

以前的Office文档是100%的二进制格式。第三方的工具操作起来非常不方便,而 Office2007从整体上都是基于XML格式的,这里并不是说Office2007文档可以保存成XML格式。而是Office2007默认的文档格式就是XML的(Word的docx、Excel的xlsx等)。也许有人会感到奇怪,用文本编辑器打开docx后,显示的仍然是二进制格式,并不是什么 XML。其实docx并不是普通的XML格式,当然,也不只是一个XML文件,docx本质上是一个zip文件,里面有一系列的xml、目录和其他的文件。如果我们将docx改成zip。就可以用winzip等软件将其解开。

正是由于这样的原因,当MIME中不存在相对应的Office2007类型的情况下,被自动识别为ZIP文件了。解决的方法很简单,在Server端添加MIME映射就可以了。Tomcat的话,可以在Web.xml中找到<mime-mapping></mime-mapping>这样的定义,按照规则添加就可以了,IIS中按照下面的方法添加(以XML为例):

  1. 选择Default Web Site,弹出Properties对话框。
  2. 选择HTTP Headers标签。
  3. 在MIME Map下,单击File Types 标签并选择New Type。
  4. 在Extension 域中键入.xml,在 Content Type 域中键入text/xml, 然后单击OK。

至于什么是MIME,一般的人应该都知道,这里简单的解释一下:
MIME (Multipurpose Internet Mail Extensions,多目的Internet邮件扩展)是创建用于电子邮件交换,网络文档,及企业网和Internet上的其他应用程序中的文件格式的规范。每个MIME格式包含一个MIME内容类型(”MIME type”)和指示存储在这个文件中的数据的子类型。MIME类型和子类型一般以类型/子类型的形式列出。MIME格式的内容广泛用于网络文档中

下面收集了大部分文件的扩展名和相应的MIME对应,有需要的可以在列表中找到并添加。


解决方案:

在Server端添加MIME映射就可以了。如Tomcat , 修改/%tomcat_home%/conf/web.xml

<mime-mapping><extension>docx</extension><mime-type>application/vnd.openxmlformats-officedocument.wordprocessingml.document</mime-type></mime-mapping><mime-mapping><extension>xlsx</extension><mime-type>application/vnd.openxmlformats-officedocument.spreadsheetml.sheet</mime-type></mime-mapping><mime-mapping><extension>pptx</extension><mime-type>application/vnd.openxmlformats-officedocument.presentationml.presentation</mime-type></mime-mapping>


java代码,如下:

package com.billzsoft.core.web.servlet;import java.io.IOException;import java.net.URLEncoder;import javax.servlet.ServletException;import javax.servlet.ServletOutputStream;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.commons.lang.StringUtils;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import com.billzsoft.core.util.AppUtil;import com.billzsoft.oa.model.system.FileAttach;import com.billzsoft.oa.service.system.FileAttachService;/** * @description 文档下载代码 * @class FileDownloadServlet * @author 不了了之之了之 * @data 2013-6-19 */public class FileDownloadServlet extends HttpServlet{private static final long serialVersionUID = 1L;private FileAttachService fileAttachService=(FileAttachService)AppUtil.getBean("fileAttachService");protected transient final Log logger = LogFactory.getLog(FileDownloadServlet.class);@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {String fileId=req.getParameter("fileId");req.setCharacterEncoding("UTF-8");resp.setCharacterEncoding("UTF-8");if(StringUtils.isNotEmpty(fileId)){FileAttach fileAttach=fileAttachService.get(new Long(fileId));String ext=fileAttach.getExt();boolean bOpenInWin = false;String openInWin = req.getParameter("openInWin");if ( (openInWin != null)&&(openInWin.equals("Y")) ) {bOpenInWin = true;}if(ext.toLowerCase().endsWith("zip")){resp.setContentType("application/x-zip-compressed");} else if(ext.toLowerCase().endsWith("rar")){resp.setContentType("application/octet-stream");} else if(ext.toLowerCase().endsWith("doc")){resp.setContentType("application/msword");} else if(ext.toLowerCase().endsWith("docx")){logger.debug("下载word2007文档!");resp.setContentType("application/vnd.openxmlformats-officedocument.wordprocessingml.document");} else if(ext.toLowerCase().endsWith("xlsx")) {logger.debug("下载excel2007文档!");resp.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");}else if(ext.toLowerCase().endsWith("pptx")){logger.debug("下载ppt2007文档!");resp.setContentType("application/vnd.openxmlformats-officedocument.presentationml.presentation");} else if(ext.toLowerCase().endsWith("xls") || ext.toLowerCase().endsWith("csv")){resp.setContentType("application/ms-excel ");} else if (ext.toLowerCase().endsWith("pdf")){resp.setContentType("application/pdf");} else{resp.setContentType("application/x-msdownload");}ServletOutputStream out = null;            try{                java.io.FileInputStream fileIn =new java.io.FileInputStream(getServletContext().getRealPath("/")+"/attachFiles/"+fileAttach.getFilePath());    resp.setHeader("Cache-Control", "private");               resp.setHeader("Pragma", "");      if (bOpenInWin) {    resp.setHeader("Content-Disposition", "inline; filename=" +URLEncoder.encode(fileAttach.getFileName(),"UTF-8"));    } else {    resp.setHeader("Content-Disposition", "attachment;filename=" +URLEncoder.encode(fileAttach.getFileName(),"UTF-8"));    }                    out = resp.getOutputStream();                                byte[] buff = new byte[1024];                int leng = fileIn.read(buff);                while(leng>0){                out.write(buff,0,leng);                leng = fileIn.read(buff);                }            }catch(Exception ex){            ex.printStackTrace();            }finally{            if(out!=null){            try {    out.flush();    } catch (IOException e) {    e.printStackTrace();    }            try {    out.close();    } catch (IOException e) {    e.printStackTrace();    }            }            }}}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {doGet(req, resp);}}



附录:

 

下面收集了大部分文件的扩展名和相应的MIME对应,有需要的可以在列表中找到并添加。

 

 

.asx,video/x-ms-asf.xml,text/xml.tsv,text/tab-separated-values.ra,audio/x-pn-realaudio.sv4crc,application/x-sv4crc.spc,application/x-pkcs7-certificates.pmc,application/x-perfmon.lit,application/x-ms-reader.crd,application/x-mscardfile.isp,application/x-internet-signup.wmlsc,application/vnd.wap.wmlscriptc.vst,application/vnd.visio.xlam,application/vnd.ms-excel.addin.macroEnabled.12.ttf,application/octet-stream.pfm,application/octet-stream.csv,application/octet-stream.aaf,application/octet-stream.one,application/onenote.hta,application/hta.atom,application/atom+xml.323,text/h323.mhtml,message/rfc822.midi,audio/mid.p7r,application/x-pkcs7-certreqresp.mny,application/x-msmoney.clp,application/x-msclip.vsd,application/vnd.visio.lpk,application/octet-stream.bin,application/octet-stream.onetoc,application/onenote.x,application/directx.wvx,video/x-ms-wvx.vcf,text/x-vcard.htc,text/x-component.htt,text/webviewhtml.h,text/plain.mht,message/rfc822.mid,audio/mid.p7b,application/x-pkcs7-certificates.gz,application/x-gzip.dvi,application/x-dvi.cpio,application/x-cpio.vdx,application/vnd.ms-visio.viewer.sldm,application/vnd.ms-powerpoint.slide.macroEnabled.12.xlm,application/vnd.ms-excel.fdf,application/vnd.fdf.setreg,application/set-registration-initiation.eps,application/postscript.p7s,application/pkcs7-signature.toc,application/octet-stream.mdp,application/octet-stream.ics,application/octet-stream.chm,application/octet-stream.asi,application/octet-stream.afm,application/octet-stream.evy,application/envoy.wmp,video/x-ms-wmp.qt,video/quicktime.mpv2,video/mpeg.xslt,text/xml.etx,text/x-setext.cod,image/cis-cod.snd,audio/basic.au,audio/basic.man,application/x-troff-man.qtl,application/x-quicktimeplayer.pmw,application/x-perfmon.class,application/x-java-applet.iii,application/x-iphone.csh,application/x-csh.z,application/x-compress.vtx,application/vnd.visio.vsw,application/vnd.visio.wps,application/vnd.ms-works.potx,application/vnd.openxmlformats-officedocument.presentationml.template.ps,application/postscript.p7c,application/pkcs7-mime.thn,application/octet-stream.mso,application/octet-stream.dot,application/msword.doc,application/msword.sgml,text/sgml.nws,message/rfc822.pbm,image/x-portable-bitmap.ief,image/ief.wav,audio/wav.texi,application/x-texinfo.mvb,application/x-msmediaview.hdf,application/x-hdf.vsx,application/vnd.visio.dotm,application/vnd.ms-word.template.macroEnabled.12.docm,application/vnd.ms-word.document.macroEnabled.12.pptx,application/vnd.openxmlformats-officedocument.presentationml.presentation.psm,application/octet-stream.java,application/octet-stream.eot,application/octet-stream.jar,application/java-archive.mpeg,video/mpeg.xsf,text/xml.map,text/plain.uls,text/iuls.rf,image/vnd.rn-realflash.m3u,audio/x-mpegurl.wma,audio/x-ms-wma.aifc,audio/aiff.mdb,application/x-msaccess.mvc,application/x-miva-compiled.stl,application/vnd.ms-pki.stl.ppsx,application/vnd.openxmlformats-officedocument.presentationml.slideshow.xlsb,application/vnd.ms-excel.sheet.binary.macroEnabled.12.setpay,application/set-payment-initiation.prm,application/octet-stream.mix,application/octet-stream.lzh,application/octet-stream.hhk,application/octet-stream.onepkg,application/onenote.xaf,x-world/x-vrml.flr,x-world/x-vrml.IVF,video/x-ivf.cnf,text/plain.asm,text/plain.tiff,image/tiff.wax,audio/x-ms-wax.ms,application/x-troff-ms.tcl,application/x-tcl.shar,application/x-shar.sh,application/x-sh.nc,application/x-netcdf.hlp,application/winhlp.oda,application/oda.pfb,application/octet-stream.fla,application/octet-stream.wm,video/x-ms-wm.rgb,image/x-rgb.ppm,image/x-portable-pixmap.ram,audio/x-pn-realaudio.sit,application/x-stuffit.dir,application/x-director.mpp,application/vnd.ms-project.xla,application/vnd.ms-excel.ssm,application/streamingmedia.axs,application/olescript.ods,application/oleobject.psp,application/octet-stream.jpb,application/octet-stream.wrz,x-world/x-vrml.m1v,video/mpeg.mno,text/xml.cmx,image/x-cmx.jpeg,image/jpeg.dib,image/bmp.rmi,audio/mid.aiff,audio/aiff.wmd,application/x-ms-wmd.wri,application/x-mswrite.pub,application/x-mspublisher.ins,application/x-internet-signup.wks,application/vnd.ms-works.xls,application/vnd.ms-excel.ai,application/postscript.crl,application/pkix-crl.qxd,application/octet-stream.dwp,application/octet-stream.xof,x-world/x-vrml.wmv,video/x-ms-wmv.nsc,video/x-ms-asf.mpa,video/mpeg.pnm,image/x-portable-anymap.rpm,audio/x-pn-realaudio-plugin.aif,audio/x-aiff.me,application/x-troff-me.pml,application/x-perfmon.trm,application/x-msterminal.m13,application/x-msmediaview.js,application/x-javascript.dxr,application/x-director.potm,application/vnd.ms-powerpoint.template.macroEnabled.12.xltx,application/vnd.openxmlformats-officedocument.spreadsheetml.template.xlt,application/vnd.ms-excel.xlc,application/vnd.ms-excel.p10,application/pkcs10.smi,application/octet-stream.sea,application/octet-stream.hqx,application/mac-binhex40.spl,application/futuresplash.movie,video/x-sgi-movie.lsf,video/x-la-asf.txt,text/plain.jfif,image/pjpeg.jpe,image/jpeg.zip,application/x-zip-compressed.wmf,application/x-msmetafile.m14,application/x-msmediaview.latex,application/x-latex.wcm,application/vnd.ms-works.pptm,application/vnd.ms-powerpoint.presentation.macroEnabled.12.xlsx,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.hhp,application/octet-stream.aca,application/octet-stream.accdb,application/msaccess.jcz,application/liquidmotion.wrl,x-world/x-vrml.wmx,video/x-ms-wmx.asr,video/x-ms-asf.lsx,video/x-la-asf.xsl,text/xml.html,text/html.tif,image/tiff.der,application/x-x509-ca-cert.pfx,application/x-pkcs12.p12,application/x-pkcs12.ppsm,application/vnd.ms-powerpoint.slideshow.macroEnabled.12.cur,application/octet-stream.accdt,application/msaccess.hdml,text/x-hdml.htm,text/html.xbm,image/x-xbitmap.jpg,image/jpeg.texinfo,application/x-texinfo.ppam,application/vnd.ms-powerpoint.addin.macroEnabled.12.xlw,application/vnd.ms-excel.rm,application/vnd.rn-realmedia.pdf,application/pdf.rar,application/octet-stream.psd,application/octet-stream.inf,application/octet-stream.emz,application/octet-stream.dsp,application/octet-stream.onea,application/onenote.jck,application/liquidmotion.mpe,video/mpeg.mp2,video/mpeg.sct,text/scriptlet.ras,image/x-cmu-raster.swf,application/x-shockwave-flash.wmz,application/x-ms-wmz.gtar,application/x-gtar.dcr,application/x-director.sldx,application/vnd.openxmlformats-officedocument.presentationml.slide.pps,application/vnd.ms-pps.p7m,application/pkcs7-mime.xsn,application/octet-stream.ocx,application/octet-stream.accde,application/msaccess.mov,video/quicktime.wmls,text/vnd.wap.wmlscript.cpp,text/plain.c,text/plain.bas,text/plain.css,text/css.art,image/x-jg.mp3,audio/mpeg.t,application/x-troff.roff,application/x-troff.tar,application/x-tar.hhc,application/x-oleobject.scd,application/x-msschedule.pko,application/vnd.ms-pki.pko.sst,application/vnd.ms-pki.certstore.ppt,application/vnd.ms-powerpoint.xtp,application/octet-stream.u32,application/octet-stream.pcx,application/octet-stream.msi,application/octet-stream.exe,application/octet-stream.asd,application/octet-stream.onetoc2,application/onenote.fif,application/fractals.mpg,video/mpeg.vml,text/xml.xdr,text/plain.vcs,text/plain.hxt,text/html.eml,message/rfc822.xpm,image/x-xpixmap.ico,image/x-icon.gif,image/gif.dwf,drawing/x-dwf.src,application/x-wais-source.tr,application/x-troff.pmr,application/x-perfmon.pma,application/x-perfmon.dll,application/x-msdownload.bcpio,application/x-bcpio.wmlc,application/vnd.wap.wmlc.wdb,application/vnd.ms-works.dotx,application/vnd.openxmlformats-officedocument.wordprocessingml.template.docx,application/vnd.openxmlformats-officedocument.wordprocessingml.document.pot,application/vnd.ms-powerpoint.xltm,application/vnd.ms-excel.template.macroEnabled.12.rtf,application/rtf.prf,application/pics-rules.snp,application/octet-stream.cab,application/octet-stream.avi,video/x-msvideo.asf,video/x-ms-asf.dtd,text/xml.wml,text/vnd.wap.wml.vbs,text/vbscript.rtx,text/richtext.dlm,text/dlm.xwd,image/x-xwindowdump.pgm,image/x-portable-graymap.bmp,image/bmp.crt,application/x-x509-ca-cert.ustar,application/x-ustar.tex,application/x-tex.sv4cpio,application/x-sv4cpio.tgz,application/x-compressed.cdf,application/x-cdf.vss,application/vnd.visio.cat,application/vnd.ms-pki.seccat.thmx,application/vnd.ms-officetheme.xlsm,application/vnd.ms-excel.sheet.macroEnabled.12.prx,application/octet-stream.pcz,application/octet-stream.onetmp,application/onenote.acx,application/internet-property-stream.wsdl,text/xml.disco,text/xml.xsd,text/xml.wbmp,image/vnd.wap.wbmp.png,image/png.pnz,image/png.smd,audio/x-smd.smz,audio/x-smd.smx,audio/x-smd.mmf,application/x-smaf


原创粉丝点击