txt文本文件下载的问题

Share

       现在有很多的数据字典类型的文件,为了方便,都是提供的txt的下载,但是当服务器没有设置的时候,默认是用浏览器进行打开的,跟pdf、xsl、doc等一样,但是如果要单击左键进行下载,怎么办呢 ?这样就必须有一个中间的过渡页面,为了方便实现,这里用的是servlet。
    接收一个传入的文件所在服务器的绝对路径(为了安全必须是不可见的传递),

 &nbsp; &nbsp; &nbsp; String fpath = "/home/http/www/cmd.txt";<br /> &nbsp; &nbsp; &nbsp; BufferedInputStream bis = null;//防止文件过大,我们定义了缓冲流<br /> &nbsp; &nbsp; &nbsp; BufferedOutputStream bos = null;<br /> &nbsp; &nbsp; &nbsp; FileInputStream fis = null;

      接下来,是关键的所在了,在html里面常用的MIME类型有application/octet-stream,image/x-icon,text/x-mht,等,下面是MIME类型的列表:
“.asf” = “video/x-ms-asf”
“.avi” = “video/avi”
“.doc” = “application/msword”
“.zip” = “application/zip”
“.xls” = “application/vnd.ms-excel”
“.gif” = “image/gif”
“.jpg”= “image/jpeg”
“.wav” = “audio/wav”
“.mp3” = “audio/mpeg3”
“.mpg” “mpeg” = “video/mpeg”
“.rtf” = “application/rtf”
“.htm”, “html” = “text/html”
“.asp” = “text/asp”

application/octet-stream表示的则是二进制的流类型,这里我们用到了它。
首先设置response的MIME类型
response.setContentType(“application/octet-stream”);
然后设置http头的描述:
response.setHeader(“Content-disposition”, “attachment;filename=”+ fpath);
这两句设置好了之后,接下来就是正常的处理流程了

 byte[] buff = new byte[2048];<br />int readI;<br />bos = new BufferedOutputStream(out);<br />fis = new FileInputStream(fpath);<br />bis = new BufferedInputStream(fis);<br />while (-1 != (readI= bis.read(buff, 0, buff.length))) {<br /> &nbsp;out.write(buff, 0, readI);<br />}

这样就将txt的文件以二进制流的形式写到了客户端!