`

jsp 文件下载(转载)

阅读更多

<%@page language="java" import="java.net.*" pageEncoding="gbk"%>
<%@page import="java.util.*"%>
<%@page import="org.*.config.*"%>
<%@ page import="java.io.*,java.util.*,java.text.*"%> 
<%
    HashMap rest = (HashMap)request.getAttribute("result");
    String pdfpath = (String)rest.get("pdfpath");
   
    String filename = (String)rest.get("filename")+".pdf";
 
 
    String name=filename;  
 
    //  String filePath = "c:/文档.doc";  
    //  如果是 WEB APP 下的相对路径文件, 请使用下列代码:   
 
    String filePath = ConstantValue.getHtmlPath()+pdfpath ;// application.getRealPath(path+"/"+newname);  
    boolean isInline = false; //  是否允许直接在浏览器内打开(如果浏览器能够预览此文件内容,  
    //  那么文件将被打开, 否则会提示下载)  
    //  清空缓冲区, 防止页面中的空行, 空格添加到要下载的文件内容中去  
    //  如果不清空的话在调用 response.reset() 的时候 Tomcat 会报错  
    //  java.lang.IllegalStateException: getOutputStream() has already been called for  
    //  this response,   
    out.clear();  
    //  {{{ BEA Weblogic 必读  
    //  修正 Bea Weblogic 出现 "getOutputStream() has already been called for this response"错误的问题  
    //  关于文件下载时采用文件流输出的方式处理:  
    //  加上response.reset(),并且所有的%>后面不要换行,包括最后一个;  
    //  因为Application Server在处理编译jsp时对于%>和<%之间的内容一般是原样输出,而且默认是PrintWriter,  
    //  而你却要进行流输出:ServletOutputStream,这样做相当于试图在Servlet中使用两种输出机制,  
    //  就会发生:getOutputStream() has already been called for this response的错误  
    //  详细请见《More Java Pitfill》一书的第二部分 Web层Item 33:试图在Servlet中使用两种输出机制 270 
    //  而且如果有换行,对于文本文件没有什么问题,但是对于其它格式,比如AutoCAD、Word、Excel等文件  
    // 下载下来的文件中就会多出一些换行符0x0d和0x0a,这样可能导致某些格式的文件无法打开,有些也可以正常打开。  
    //  同时这种方式也能清空缓冲区, 防止页面中的空行等输出到下载内容里去   
    response.reset();  
    //  }}}   
    try {  
        java.io.File f = new java.io.File(filePath);  
        if (f.exists() && f.canRead()) {  
            //  我们要检查客户端的缓存中是否已经有了此文件的最新版本, 这时候就告诉  
            //  客户端无需重新下载了, 当然如果不想检查也没有关系   
 
            //  从服务器的配置来读取文件的 contentType 并设置此contentType, 不推荐设置为  
            //  application/x-download, 因为有时候我们的客户可能会希望在浏览器里直接打开,  
            //  如 Excel 报表, 而且 application/x-download 也不是一个标准的 mime type,  
            //  似乎 FireFox 就不认识这种格式的 mime type   
            String mimetype = null;  
            mimetype = application.getMimeType(filePath);  
            if (mimetype == null) {  
                mimetype = "application/octet-stream;charset=iso8859-1";  
            }  
            response.setContentType(mimetype);  
            //  IE 的话就只能用 IE 才认识的头才能下载 HTML 文件, 否则 IE 必定要打开此文件!   
            String ua = request.getHeader("User-Agent"); //  获取终端类型   
            if (ua == null)  
                ua = "User-Agent:Mozilla/4.0(compatible; MSIE 6.0;)";  
            boolean isIE = ua.toLowerCase().indexOf("msie") != -1; //  是否为 IE   
            if (isIE && !isInline) {  
                mimetype = "application/x-msdownload";  
            }  
            //  下面我们将设法让客户端保存文件的时候显示正确的文件名, 具体就是将文件名  
            //  转换为 ISO8859-1 编码   
            name = new String(name.getBytes(),"iso8859-1");  
            String inlineType = isInline ? "inline" : "attachment"; //  是否内联附件  
            //  or using this, but this header might not supported by FireFox  
            // response.setContentType("application/x-download");   
            response.setHeader("Content-Disposition", inlineType+";filename=\""+name+"\"");  
            response.setContentLength((int) f.length()); //  设置下载内容大小   
            byte[] buffer = new byte[4096]; //  缓冲区   
            BufferedOutputStream output = null;  
            BufferedInputStream input = null;  
            try {  
                output = new BufferedOutputStream(response.getOutputStream());  
                input = new BufferedInputStream(new FileInputStream(f));  
                int n = (-1);  
                while ((n = input.read(buffer, 0, 4096)) > -1) {  
                    output.write(buffer, 0, n);  
                }  
                response.flushBuffer();  
            } catch (Exception e) {  
            } //  用户可能取消了下载   
            finally {  
                if (input != null)  
                    input.close();  
                if (output != null)  
                    output.close();  
            }  
        }  
        return;  
    } catch (Exception ex) {  
        ex.printStackTrace();   
    }  
    //  如果下载失败了就告诉用户此文件不存在   
    response.sendError(404);  
 
%>
 

分享到:
评论

相关推荐

    支持中文的jspsmartupload

    转载 软件说明: 许多朋友反应使用后,出现Bad Version的问题,现在跟大家说明一下,我这个版本...2.下载默认方法downloadFile("要下载的文件路径"),指定编码使用downloadFile("要下载的文件路径", "编码名称")。

    三种纯jsp文件上传实例(cos,smartupload,fileupload)

    本人亲自使用cos,smartupload,fileupload做的文件上传得小例子,只用了基本功能,注释非常详细,一看就能学会。测试时请使用图片上传,以便达到最佳效果。转载请注明原作者名,请珍惜他人劳动成果。

    jsp File Browser中文版

    修改于国外著名的开源JSP文件管理器,原版不支持中文,本人修改后支持:1、中文文件名、文件夹名的显示、修改、删除、创建;2、顶部添加主页、刷新功能链接;3、增加图片文件的预览功能(非IE浏览器需拖拽到新标签页...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part2

    同时,转载时不要移除本申明。如产生任何纠纷,均与本博客所有人、发表该文献之人无任何关系。谢谢合作 本书共分4部分,从xml、servlet、jsp和应用的角度向读者展示了java web开发中各种技术的应用,循序渐进地...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part3

    同时,转载时不要移除本申明。如产生任何纠纷,均与本博客所有人、发表该文献之人无任何关系。谢谢合作 本书共分4部分,从xml、servlet、jsp和应用的角度向读者展示了java web开发中各种技术的应用,循序渐进地...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part4

    同时,转载时不要移除本申明。如产生任何纠纷,均与本博客所有人、发表该文献之人无任何关系。谢谢合作 本书共分4部分,从xml、servlet、jsp和应用的角度向读者展示了java web开发中各种技术的应用,循序渐进地...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part5

    同时,转载时不要移除本申明。如产生任何纠纷,均与本博客所有人、发表该文献之人无任何关系。谢谢合作 本书共分4部分,从xml、servlet、jsp和应用的角度向读者展示了java web开发中各种技术的应用,循序渐进地...

    (aigo转载)jsp格式化工具

    无需安装,单文件,不写注册表等 avast!杀软检测无毒 支持制定缩减单位 以下测试感言:格式化效果不赖(温馨提示:格式化前请备份。其实我不想定资源分的,无奈我没积分了,所以就弄了2分,希望大家支持)

    jspsmartupload实现10个图片上传

    拷贝于upload.jsp和拷贝于uploadimage.jsp是源文件;upload.jsp和uploadimage.jsp是我配合自己的数据库更改过的文件。——转载*宏软JSP上传系统 V2.0完美版

    JAVA读取数据库的XML配置文件

    JAVA读取数据库的XML配置文件. 前言.虽然现在有HEIBERNATE开源框架做为持久层,可以很好的解决这个问题. 当然,SSH这些开源框架,也必不是...申明:以下代码是我的研究心血,转载请保留作者名称.为了方便JSP初学者而共享...

    这是我的第一个

    当我们第一次访问jsp的时候,tomcat需要吧jsp翻译成一个java文件,然后在编译成class文件,然后在运行。 --------------------- 作者:java_esky110 来源:CSDN 原文:...

    基于JSP的小区停车管理系统设计与实现.zip

    资源包含文件:课程报告word+项目源码 开发工具:JDK-8、HTML、JavaScript、Eclipse 集成开发环境、MySQL 数据库管理系统、Tomcat 服务器。 本文转载自:https://blog.csdn.net/newlw/article/details/125168210

    C# Tutorial mobi

    C# Tutorial 英文mobi 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除

    xml/html/jsp/php/所有标签形式文档 缩进格式化

    该工具是为项目组写的,组成员在开发中必须先格式化 xml 文件后才上传到 svn ,目的是保证风格统一! web 开发中,xml 现在使用的越来越多,良好的书写格式应该是程序员的基本要求,有了这个格式调整工具,应该是...

    基于springMVC+mysql的前后端的医专情景教学系统

    视频文件百度网盘下载地址 链接: https://pan.baidu.com/s/1k_kuegqDzy-adf7JhjgaLw 密码: f4ce 是否原创(转载必填原文地址) 原创,在线演示地址http://47.94.222.47:8080/situation_teaching_system/InitIndexInf

    Musou系列游戏MOD工具v0.1

    Musou MOD Tool(KOIE无双系列游戏MOD工具) ChangeLog: 版本 0.1 2010.02.19 初版 ========== 支持Musou系列游戏(eg:真三国无双,无双大蛇)的贴图,3D...转载请注明出处. Made by JemiZhuu(周士淳, zsword) 2010.02.19

    解决struts2下载异常的jar包 struts2-sunspoter-stream-1.0.jar

    在struts2中使用result里type="stream"的结果类型时,可以实现文件的下载管理,使用时也是比较顺畅,但是当在“下载提示窗口”中点击“取消按钮”时,总是报出“java.lang.IllegalStateException”异常,异常内容...

    仿天猫商城ssm框架

    方向永远比努力重要,在行动之前思考清楚,我一直觉得是很重要的一点,我觉得通过对项目的分析,对我项目的进展有一个整体的构思,各个模块该有什么功能都比较清晰,特别在编写 JSP 文件的时候能明显感觉不会很迷茫...

    web在线翻译程序--可当java接口使用

    项目描述 web在线翻译--调用python程序获取结果 python程序爬取的有道接口 运行环境 jdk8+tomcat9+IntelliJ IDEA+Jpython环境 ...是否原创(转载必填原文地址) 原创 项目截图(必填) 运行截图(必填)注意事项

    SpringBootDay01-HelloWorld-1.0-SNAPSHOT.jar

    版权声明:本文为CSDN博主「倦眼问酒书j」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/weixin_42328682/article/details/105504539

Global site tag (gtag.js) - Google Analytics