- 浏览: 239260 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
thepastsee:
304572183股票交流 欢迎加入
实时股票 -
345161974:
很不错,我第一个接触的CSS卡片布局效果,多谢
css卡片效果
jsp java 下载文件
文章分类:Java编程
Html代码
- < %@ page language = "java" pageEncoding = "gb2312"
- import = "com.myerp.jichu.publicclass.*" import = "java.sql.*"
- contentType = "text/html;charset=GB2312" % >
- < %@ page
- import = "com.myerp.jichu.caozuo.*,java.io.*, java.util.*, java.text.*" % >
- < jsp:directive.page import = "java.util.Date" />
- < %
- //String path = request .getContextPath();
- //String basePath = request .getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
- String zygx_id = request .getParameter("zygxid");
- String zygxurl = request .getParameter("zygxurl");
- String zygxYwjm = request .getParameter("zygxywjm");
- zygxurl zygxurl = zygxurl.substring(zygxurl.lastIndexOf("/"),zygxurl.length());//截取url中文件名
- Str str = new Str();
- int zygxid = str .parseInt(zygx_id);
- %>
- < %--
- 直接在JSP页面中进行文件下载的代码(改 Servlet 或者
- JavaBean 的话自己改吧), 支持中文附件名(做了转内码处理). 事实上只要向
- out 输出字节就被认为是附件内容, 不一定非要从文件读取原始数据, 从数据
- 库中读取也可以的.
- 需传三个参数 newname,name,path
- --%>
- < %!//If returns true, then should return a 304 (HTTP_NOT_MODIFIED)
- public static boolean checkFor304(HttpServletRequest req, File file) {
- // We'll do some handling for CONDITIONAL GET (and return a 304)
- // If the client has set the following headers, do not try for a 304.
- // pragma: no-cache
- // cache-control: no-cache
- if ("no-cache".equalsIgnoreCase(req.getHeader("Pragma"))
- || "no-cache".equalsIgnoreCase(req.getHeader("cache-control"))) {
- // Wants specifically a fresh copy
- } else {
- // HTTP 1.1 ETags go first
- String thisTag = Long .toString(file.lastModified());
- String eTag = req .getHeader("If-None-Match");
- if (eTag != null) {
- if (eTag.equals(thisTag)) {
- return true;
- }
- }
- // Next, try if-modified-since
- DateFormat rfcDateFormat = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss z");
- Date lastModified = new Date(file.lastModified());
- try {
- long ifModifiedSince = req .getDateHeader("If-Modified-Since");
- // log.info("ifModifiedSince:"+ifModifiedSince);
- if (ifModifiedSince != -1) {
- long lastModified lastModifiedTime = lastModified.getTime();
- // log.info("lastModifiedTime:" + lastModifiedTime);
- if (lastModifiedTime < = ifModifiedSince) {
- return true;
- }
- } else {
- try {
- String s = req .getHeader(" If-Modified-Since ");
- if (s != null) {
- Date ifModifiedSinceDate = rfcDateFormat .parse(s);
- // log.info("ifModifiedSinceDate:" + ifModifiedSinceDate);
- if (lastModified.before(ifModifiedSinceDate)) {
- return true;
- }
- }
- } catch (ParseException e) {
- // log.warn(e.getLocalizedMessage(), e);
- }
- }
- } catch (IllegalArgumentException e) {
- // Illegal date/time header format.
- // We fail quietly, and return false.
- // FIXME: Should really move to ETags.
- }
- }
- return false;
- }%>
- < %
- String filePath = application .getRealPath("zygxq/"+zygxurl);//zygxurl为保存的文件名
- 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()) {
- // 我们要检查客户端的缓存中是否已经有了此文件的最新版本, 这时候就告诉
- // 客户端无需重新下载了, 当然如果不想检查也没有关系
- if (checkFor304(request, f)) {
- // 客户端已经有了最新版本, 返回 304
- response.sendError(HttpServletResponse.SC_NOT_MODIFIED);
- return;
- }
- // 从服务器的配置来读取文件的 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=gb2312" ;
- }
- 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" ;
- }
- // 下面我们将设法让客户端保存文件的时候显示正确的文件名, 具体就是将文件名
- // 转换为 gb2312 编码
- String downFileName = new String(f.getName().getBytes(),"gb2312");
- 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 =\""+zygxYwjm+"\"");//zygxYwjm为客户看到的下载文件名
- 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);
- %>
<%@ page language="java" pageEncoding="gb2312" import="com.myerp.jichu.publicclass.*" import="java.sql.*" contentType="text/html;charset=GB2312"%> <%@ page import="com.myerp.jichu.caozuo.*,java.io.*, java.util.*, java.text.*"%> <jsp:directive.page import="java.util.Date" /> <% //String path = request.getContextPath(); //String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; String zygx_id=request.getParameter("zygxid"); String zygxurl=request.getParameter("zygxurl"); String zygxYwjm=request.getParameter("zygxywjm"); zygxurl = zygxurl.substring(zygxurl.lastIndexOf("/"),zygxurl.length());//截取url中文件名 Str str=new Str(); int zygxid=str.parseInt(zygx_id); %> <%-- 直接在JSP页面中进行文件下载的代码(改 Servlet 或者 JavaBean 的话自己改吧), 支持中文附件名(做了转内码处理). 事实上只要向 out 输出字节就被认为是附件内容, 不一定非要从文件读取原始数据, 从数据 库中读取也可以的. 需传三个参数 newname,name,path --%> <%!//If returns true, then should return a 304 (HTTP_NOT_MODIFIED) public static boolean checkFor304(HttpServletRequest req, File file) { // We'll do some handling for CONDITIONAL GET (and return a 304) // If the client has set the following headers, do not try for a 304. // pragma: no-cache // cache-control: no-cache if ("no-cache".equalsIgnoreCase(req.getHeader("Pragma")) || "no-cache".equalsIgnoreCase(req.getHeader("cache-control"))) { // Wants specifically a fresh copy } else { // HTTP 1.1 ETags go first String thisTag = Long.toString(file.lastModified()); String eTag = req.getHeader("If-None-Match"); if (eTag != null) { if (eTag.equals(thisTag)) { return true; } } // Next, try if-modified-since DateFormat rfcDateFormat = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss z"); Date lastModified = new Date(file.lastModified()); try { long ifModifiedSince = req.getDateHeader("If-Modified-Since"); // log.info("ifModifiedSince:"+ifModifiedSince); if (ifModifiedSince != -1) { long lastModifiedTime = lastModified.getTime(); // log.info("lastModifiedTime:" + lastModifiedTime); if (lastModifiedTime <= ifModifiedSince) { return true; } } else { try { String s = req.getHeader(" If-Modified-Since "); if (s != null) { Date ifModifiedSinceDate = rfcDateFormat.parse(s); // log.info("ifModifiedSinceDate:" + ifModifiedSinceDate); if (lastModified.before(ifModifiedSinceDate)) { return true; } } } catch (ParseException e) { // log.warn(e.getLocalizedMessage(), e); } } } catch (IllegalArgumentException e) { // Illegal date/time header format. // We fail quietly, and return false. // FIXME: Should really move to ETags. } } return false; }%> <% String filePath = application.getRealPath("zygxq/"+zygxurl);//zygxurl为保存的文件名 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()) { // 我们要检查客户端的缓存中是否已经有了此文件的最新版本, 这时候就告诉 // 客户端无需重新下载了, 当然如果不想检查也没有关系 if (checkFor304(request, f)) { // 客户端已经有了最新版本, 返回 304 response.sendError(HttpServletResponse.SC_NOT_MODIFIED); return; } // 从服务器的配置来读取文件的 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=gb2312"; } 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"; } // 下面我们将设法让客户端保存文件的时候显示正确的文件名, 具体就是将文件名 // 转换为 gb2312 编码 String downFileName = new String(f.getName().getBytes(),"gb2312"); 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=\""+zygxYwjm+"\"");//zygxYwjm为客户看到的下载文件名 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); %>
黑色头发:http://heisetoufa.iteye.com/
发表评论
-
jdbc_连接池_转
2012-02-19 22:49 0http://z466459262.iteye.com/bl ... -
java_贪吃蛇——
2012-01-17 11:14 848ADADS -
java并发重构ppt_转温 少
2011-06-23 16:04 687ooooo -
GBK_UTF-8_转
2011-06-21 11:15 1550转 http://www.iteye.com/topi ... -
单例模式七种写法_转
2011-05-26 23:19 789kjljkl -
设计模式_code_转转转
2011-05-25 17:14 690kljlj -
java_字符串操作——插入、替换、删除_转
2011-03-18 18:38 1247字符串操作——插入、替换、删除 ... -
mysq 存储过程技术手册
2011-02-17 22:49 454jklkj -
mysql专家_分析pdf
2011-02-17 20:43 850dfasdfasdf -
成均科技_面试
2011-02-16 17:38 848成均科技: XmlHttpRequest 浏览器对 ... -
java 学习方向
2011-01-26 16:56 663http://newleague.iteye.com/ ... -
多线程背课__售票_转转转
2011-01-25 10:19 771票真难买呀,咋回个家就怎么难呢? 这几天学习了下线程, ... -
web 项目_ log4j__转转java3Z
2011-01-18 22:16 1014在web应用中使用日志工具log4J ... -
汉字排序_java_转转
2011-01-15 17:09 893java中漢字按拼音排序 ... -
ecilpse_apanta_
2011-01-15 00:11 1044<!-- [if gte mso 9]><x ... -
linux_virutalBox_固定ip_转转
2011-01-12 21:35 951Windows XP通过Sun VirtualBox ... -
存储过程_转转转 _ibatis
2011-01-04 21:14 1301作者:袁光东 我们在进行pl/sql编程时打交道最多的 ... -
J2EE项目异常处理_转
2011-01-04 21:08 697J2EE 项目异常处理 ... -
防盗链_图片
2010-12-30 08:57 878做个图片的防盗链 ... -
java 缩略图__转
2010-12-24 00:29 735//----------------------------- ...
相关推荐
最后,“mtc.jsp”是JSP文件的具体名称,可能是该项目的主要入口或者用于实现文件管理功能的关键页面。 【描述解析】 描述中提到“JSP版文件管理,可以管理系统所有盘的文件。”这揭示了项目的核心特性,即它是一个...
JSP文件管理器是一个应用程序,它允许用户通过Web界面查看、上传、下载、删除和管理服务器上的文件。这样的系统在共享文件、协作工作或远程访问文件时非常有用。 ### JSP核心概念 1. **页面元素**:JSP页面由静态...
标签进一步强调了关键词“jsp上传”、“jsp多文件上传”和“jsp文件上传”,这些都与文件上传的特定场景有关。在JSP中处理多文件上传意味着组件需要能够处理一个请求中包含的多个文件,并且可能支持并发上传,以提高...
这些文件通常与JSP页面配合工作,以呈现动态内容。 7. **jsp_cms**:这个标签暗示了CMS系统的核心部分是用JSP编写的,强调了系统的后端逻辑和视图层是基于Java技术的。 8. **mysql_**:此标签可能表明系统对MySQL...
2. "BBS" - 这可能是论坛项目的源代码目录,包含JSP文件、Servlet、CSS、JavaScript、数据库配置等相关文件。通常,JSP项目会包括如login.jsp(登录页面)、post.jsp(发帖页面)、forum.jsp(论坛首页)等文件,...
**JSpsmartupload组件**是一个基于Java的上传文件解决方案,主要应用于JSP(Java Server Pages)环境中。这个组件提供了一种简单且强大的方式来处理用户通过网页上传的文件。在标题和描述中提到的,该组件的核心是用...
【标题】"jspupload.rar_jspuplo_jspupload source_下载文件" 是一个与Java Servlet Pages (JSP)相关的上传下载组件的源代码包。这个组件,名为jspupload,是一个专门为JSP开发的工具,它允许用户在Web应用程序中...
在这个名为"jsp--upload.rar"的压缩包中,我们重点关注的是文件上传功能,具体体现在"upload.jsp"这个文件上。 文件上传是Web应用中的常见需求,它允许用户将本地文件传输到服务器,以便于存储、处理或共享。在JSP...
通常,在JSP项目中,"BBS"可能是一个目录,包含着如HTML、CSS、JavaScript、JSP文件、图片资源、配置文件等,以及可能的数据库连接配置和SQL脚本。 综上所述,这个系统是一个基于JSP的BBS论坛,专门为酒店管理场景...
JSP文件在服务器端被编译为Servlet,然后由Web服务器执行,生成HTML响应给客户端。JSP的核心优势在于它将表现层(HTML)与业务逻辑(Java)分离,实现了良好的可维护性和可扩展性。 二、BBS系统概述 BBS,即...
【标题】"jsp_bbs.rar_bbs j_jsp_jsp bbs_jsp 论坛 系统_jsp论坛系统" 涉及的核心知识点主要围绕JSP(Java Server Pages)技术构建一个BBS(Bulletin Board System,即论坛系统)进行展开。JSP是一种基于Java的...
【压缩包子文件的文件名称列表】"学生课绩管理系统jsp+servlet+javaBean+sql_server"表明项目可能采用了MVC(Model-View-Controller)架构,其中JSP作为视图层,Servlet处理请求和业务逻辑,JavaBean作为模型层,...
4. **upload.jsp**:JSP文件,处理上传请求并保存文件。 5. **CSS和图片文件**:用于美化UI和指示上传状态。 6. **可能的示例配置文件**:如SWFUpload的配置JSON文件,定义上传参数。 为了使这个Demo工作,你需要在...
JSP文件会被Web容器(如Apache Tomcat)编译成Servlet,然后执行生成HTML响应返回给客户端。 在`jsp_spy_2010`中,"spy"通常指的是监控或者探测功能,可能包含了一些用于远程管理和监控服务器状态的脚本。这些脚本...
"www.pudn.com.txt" 可能包含关于项目来源或下载链接的信息,而"JSP做的BBS,程序较简单"可能是项目的源代码文件或者相关文档,它会详细解释如何运行、部署和理解这个JSP BBS系统。 JSP BBS系统的实现通常涉及以下...
【标题】"goodsshop.rar_JSP Server2000_goodsshop_jsp_jsp sql_jsp sql tomcat" 指的是一个基于JSP(JavaServer Pages)技术的网上商城系统,该系统构建在SQL SERVER 2000数据库管理和Apache Tomcat应用服务器之上...
在这个场景下,我们关注的是如何在JSP页面中实现文件的下载功能。这个功能在很多网站上都常见,例如提供文档、软件或其他资源的下载服务。下面我们将详细探讨如何实现这一功能。 首先,为了创建一个下载链接,你...
SmartUpload是一个强大的JSP文件上传组件,它简化了在JSP中处理文件上传的过程。本篇文章将深入探讨如何在Windows环境下使用SmartUpload组件在JSP中实现文件上传功能。 首先,我们需要了解SmartUpload组件的基本...
JSP文件会被编译成Servlet,然后由Web服务器执行。 2. **DAO(Data Access Object)模式**:DAO是一种设计模式,它的主要目的是提供一个接口,用于应用程序与数据库之间的交互,隔离了业务逻辑和数据访问细节。DAO...
【标题】"jsp.rar_JSP 论坛源代码_bbs jsp_bbs jsp_jsp 论坛_论坛" 暗示了这个压缩包包含了一个基于JSP(Java Server Pages)技术构建的论坛系统源代码。JSP是Java平台上的动态网页技术,它允许开发人员将静态HTML与...