<%@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);
%>
分享到:
相关推荐
在"Name"字段中,你可以输入JSP文件的名称,如"login",JBuilder会自动添加".jsp"后缀。此外,向导还提供了生成示例Bean和错误处理页面的选项,但对于初学者来说,这些可以暂时不选,以保持页面简洁。 完成向导后,...
转载 软件说明: 许多朋友反应使用后,出现Bad Version的问题,现在跟大家说明一下,我这个版本...2.下载默认方法downloadFile("要下载的文件路径"),指定编码使用downloadFile("要下载的文件路径", "编码名称")。
本人亲自使用cos,smartupload,fileupload做的文件上传得小例子,只用了基本功能,注释非常详细,一看就能学会。测试时请使用图片上传,以便达到最佳效果。转载请注明原作者名,请珍惜他人劳动成果。
修改于国外著名的开源JSP文件管理器,原版不支持中文,本人修改后支持:1、中文文件名、文件夹名的显示、修改、删除、创建;2、顶部添加主页、刷新功能链接;3、增加图片文件的预览功能(非IE浏览器需拖拽到新标签页...
【标题】:“转载的jsp信息发布系统” 【描述】:“jsp信息发布系统是一个基于MSSQL数据库的学习实例,非常适合初学者深入理解和实践。” 这个“jsp信息发布系统”是一个基于Java Server Pages(JSP)技术构建的...
2. **易于维护**:JSP文件可以自动转换成Servlet,这使得JSP页面的修改不会影响到整体应用的性能。 3. **高性能**:JSP编译后的Servlet能够提供更高的性能,特别是在处理大量数据时。 4. **良好的跨平台能力**:由于...
ntko大文件上传控件是专门用于处理大文件上传的软件组件,对于Web应用程序的开发人员来说,它提供了一种高效、稳定且用户友好的解决方案。这个控件能够有效地解决传统HTTP上传方式在处理大文件时可能出现的问题,如...
同时,转载时不要移除本申明。如产生任何纠纷,均与本博客所有人、发表该文献之人无任何关系。谢谢合作 本书共分4部分,从xml、servlet、jsp和应用的角度向读者展示了java web开发中各种技术的应用,循序渐进地...
同时,转载时不要移除本申明。如产生任何纠纷,均与本博客所有人、发表该文献之人无任何关系。谢谢合作 本书共分4部分,从xml、servlet、jsp和应用的角度向读者展示了java web开发中各种技术的应用,循序渐进地...
同时,转载时不要移除本申明。如产生任何纠纷,均与本博客所有人、发表该文献之人无任何关系。谢谢合作 本书共分4部分,从xml、servlet、jsp和应用的角度向读者展示了java web开发中各种技术的应用,循序渐进地...
同时,转载时不要移除本申明。如产生任何纠纷,均与本博客所有人、发表该文献之人无任何关系。谢谢合作 本书共分4部分,从xml、servlet、jsp和应用的角度向读者展示了java web开发中各种技术的应用,循序渐进地...
无需安装,单文件,不写注册表等 avast!杀软检测无毒 支持制定缩减单位 以下测试感言:格式化效果不赖(温馨提示:格式化前请备份。其实我不想定资源分的,无奈我没积分了,所以就弄了2分,希望大家支持)
拷贝于upload.jsp和拷贝于uploadimage.jsp是源文件;upload.jsp和uploadimage.jsp是我配合自己的数据库更改过的文件。——转载*宏软JSP上传系统 V2.0完美版
该系统是一款基于HTML、CSS、Java开发的西安理工大学计算机学院楼盘管理系统设计源码,包含227个文件,涵盖65个类文件、35个HTML文件、35个JSP文件、25个Java文件、20个XML配置文件、18个JPG图片文件、6个CSS文件、6...
<definition name="baseLayout" template="/WEB-INF/jsp/layouts/baseLayout.jsp"> <put-attribute name="header" value="/WEB-INF/jsp/include/header.jsp" /> <put-attribute name="menu" value="/WEB-INF/...
这个组件能够帮助开发者从XML配置文件中提取数据,生成用户界面的菜单结构,使得应用程序的导航部分更加灵活和易于维护。下面将详细介绍Struts-menu的使用方法以及如何通过静态方式获取XML配置来构建菜单。 首先,...
- **Jasper升级**:JSP编译器Jasper升级到2.3.0,支持JSP 2.2规范,提高了JSP的处理效率。 2. **Tomcat 8**: - **Servlet 3.1** 支持:增加了WebSocket API,允许双向通信,增强了HTTP/2协议支持。 - **改进的...
资源包含文件:课程报告word+项目源码 开发工具:JDK-8、HTML、JavaScript、Eclipse 集成开发环境、MySQL 数据库管理系统、Tomcat 服务器。 本文转载自:https://blog.csdn.net/newlw/article/details/125168210
C# Tutorial 英文mobi 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除
该工具是为项目组写的,组成员在开发中必须先格式化 xml 文件后才上传到 svn ,目的是保证风格统一! web 开发中,xml 现在使用的越来越多,良好的书写格式应该是程序员的基本要求,有了这个格式调整工具,应该是...