- 浏览: 97442 次
- 性别:
- 来自: 广州
文章分类
最新评论
一、如何使用
如果此Servlet命名为download,请求的URL为:/download?path=xxx,请求后出现下载窗口:
二、源码
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class FileDownload extends HttpServlet {
protected void service(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
// 服务器相对路径
String path = req.getParameter("path");
// 服务器绝对路径
path = getServletContext().getRealPath("/") + path;
// 检查文件是否存在
File obj = new File(path);
if (!obj.exists()) {
res.setContentType("text/html;charset=GBK");
res.getWriter().print("指定文件不存在!");
return;
}
// 读取文件名:用于设置客户端保存时指定默认文件名
int index = path.lastIndexOf("\\"); // 前提:传入的path字符串以“\”表示目录分隔符
String fileName = path.substring(index + 1);
// 写流文件到前端浏览器
ServletOutputStream out = res.getOutputStream();
res.setHeader("Content-disposition", "attachment;filename=" + fileName);
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
try {
bis = new BufferedInputStream(new FileInputStream(path));
bos = new BufferedOutputStream(out);
byte[] buff = new byte[2048];
int bytesRead;
while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) {
bos.write(buff, 0, bytesRead);
}
} catch (IOException e) {
throw e;
} finally {
if (bis != null)
bis.close();
if (bos != null)
bos.close();
}
}
}
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class FileDownload extends HttpServlet {
protected void service(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
// 服务器相对路径
String path = req.getParameter("path");
// 服务器绝对路径
path = getServletContext().getRealPath("/") + path;
// 检查文件是否存在
File obj = new File(path);
if (!obj.exists()) {
res.setContentType("text/html;charset=GBK");
res.getWriter().print("指定文件不存在!");
return;
}
// 读取文件名:用于设置客户端保存时指定默认文件名
int index = path.lastIndexOf("\\"); // 前提:传入的path字符串以“\”表示目录分隔符
String fileName = path.substring(index + 1);
// 写流文件到前端浏览器
ServletOutputStream out = res.getOutputStream();
res.setHeader("Content-disposition", "attachment;filename=" + fileName);
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
try {
bis = new BufferedInputStream(new FileInputStream(path));
bos = new BufferedOutputStream(out);
byte[] buff = new byte[2048];
int bytesRead;
while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) {
bos.write(buff, 0, bytesRead);
}
} catch (IOException e) {
throw e;
} finally {
if (bis != null)
bis.close();
if (bos != null)
bos.close();
}
}
}
三、web.xml配置
<servlet>
<servlet-name>FileDownload</servlet-name>
<servlet-class>com.fastunit.test.FileDownload</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>FileDownload</servlet-name>
<url-pattern>/download</url-pattern>
</servlet-mapping>
<servlet-name>FileDownload</servlet-name>
<servlet-class>com.fastunit.test.FileDownload</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>FileDownload</servlet-name>
<url-pattern>/download</url-pattern>
</servlet-mapping>
四、补充说明
本例只是一个简单实现,应用时需要在实际环境中处理以下问题:
1. 权限问题:结合实际系统增加用户权限控制
2. 中文文件名:中文问题与运行环境有关,不同环境下解决方式也有差异,一般可通过转码来解决。
3. 文件类型:文件类型统一时可直接指定,如res.setContentType("application/zip");文件类型不确定时可不设、设一个不存在的、或通过解析文件名后缀来设置,以实际测试通过为准。
来自:http://www.blogjava.net/fastunit/archive/2008/01/22/177034.html
发表评论
-
【转】导出网页中的table到excel 使用Java方式
2011-08-04 12:02 1652response.setContentType(&qu ... -
【转】oracle 行转列
2011-05-12 14:50 919数据库查询中难免会遇到行列转换的情况,摘列一些较精典的 ... -
【转】select元素javascript常用操作
2011-05-03 16:15 659/*-------------------------- ... -
【转】使用Spring的NamedParameterJdbcTemplate完成DAO操作
2011-04-22 15:33 1098NamedParameterJdbcTemplate内 ... -
【转】使用Spring的SimpleJdbcTemplate完成DAO操作
2011-04-22 15:31 973SimpleJdbcTemplate内部包含了一个Na ... -
【转】Oracle:Merge Into 语句代替Insert/Update在Oracle中的应用实战
2011-04-13 14:30 2033动机: 想在Oracle中 ... -
【转】直接把EXCEL粘贴到网页上
2011-04-06 08:33 1219<html> <meta http- ... -
【转】word 任意页开始插入页码
2011-03-31 15:45 1063一、如果你想从第二页开始插入页码的话: 1、将鼠标定位 ... -
【转】最简单的java模板引擎——JTPL
2011-03-27 15:31 2486sample1.jtpl < ... -
【转】JS特效代码大全(七)超全的JS树形菜单共享
2011-03-25 08:59 1234JS特效代码大全(七)超全的JS树形菜单共享 标 ... -
【转】JavaScript获取select的值全解
2011-03-24 15:53 815获取显示的汉字 document.getElemen ... -
【转】常用的JavaScript验证正则表达式
2011-03-07 13:22 740下面都是我收集的一些比较常用的正则表达式,因为平常可能在 ... -
【转】flex的问题解决
2011-02-27 03:05 1269出自:http://www.iteye.com/problem ... -
【转】软考、职称、职称资格及三者之间的关系
2010-08-02 09:19 1470目前,人事部 ... -
【转】如何学Flex
2010-07-31 18:54 852如何学Flex 近由于 ... -
【转】javamail发送邮件的简单实例
2010-07-29 11:19 1132今天学习了一下JavaMail,javamail发送 ... -
【转】hibernate的Criteria Query
2010-07-29 10:03 1136当查询数据时,人们往往需要设置查询条件。在SQL或HQ ...
相关推荐
实现上传下载,服务器用的是tomcat,将注册信息、文件信息写入xml文件中
com.fm.FileManagerService:一个servlet用来实现主要的文件上传下载逻辑的 com.fm.MyPreogressListener:一个进度监听类,用来做上传进度条的 jquery-1.9.1.js index.jsp:文件列表页面 upload.jsp:文件上传form...
NULL 博文链接:https://firezhfox.iteye.com/blog/1768278
实现简单的文件上传功能。 在工程中加入io和upload组件的方法: Windows-preferences-Java-buildpath-userlibraries 右击工程名:buildpath-config buildpath-libraries-addlibraries-userliraries-next,加入包即可...
无组件用servlet实现文件上传,可以定义文件类型和大小,可以实现多文件上传。 包含全部源码,在tomcat下测试通过。 欢迎下载使用,可以随意修改和发布。 说明:源文件放在uptest\WEB-INF\classes下。
【资源说明】 1、该资源包括项目的全部源码,下载可以直接使用! 2、本项目适合作为计算机、数学、电子信息等专业的课程设计、期末大作业和...基于Servlet+JSP实现的超市订单管理系统源码+项目说明+数据库sql文件.zip
基于servlet+jsp+mysql实现的javaweb校园车辆管理系统源码+数据库文件.zip 内含演示视频,代码完整下载可用。 基于servlet+jsp+mysql实现的javaweb校园车辆管理系统源码+数据库文件.zip 内含演示视频,代码完整...
ServletMVC源码 源码描述: 一、源码介绍 通过java的反射技术实现MVC功能的基本原理 二、主要功能 自定义注解,dom4j读取配置文件,反射读取路由,实现了登录功能的逻辑,对理解MVC原理有一定帮助 三、注意...
是用servlet实现的一个考试系统, 功能齐全,MVC设计模式, 数据库为Sqserver 功能包括: 1:一套简单的权限系统,可以动态管理功能 2:用户管理功能 3.考试及分数统计 4.生成试卷以及报表 5.文件上传下载 注意,此资源仅供...
NULL 博文链接:https://cui-yh.iteye.com/blog/2310539
1、项目介绍 系统实现了展示所有省份信息,及对应的城市信息...数据源采用定义的文件json格式获取 讲所有格式编码转化为UTF-8 > 线上访问地址:http://localhost:8080/weather/ json数据格式化的转化采用谷歌组件gson
Servlet读取XML文件实现JSP简单分页 博文链接:https://thtwin.iteye.com/blog/430521
本项目是基于Java的JSP+Servlet网站开发设计源码,包含691个文件,其中主要包含232个Markdown文档,87个xml配置文件,75个java源代码文件,71个jar包文件等。系统采用JSP和Servlet技术,实现了网站开发的功能,支持...
1、该资源包括项目的全部源码,下载可以直接使用! 2、本项目适合作为计算机、数学、电子信息等专业的课程设计、期末大作业和毕设项目,作为参考资料学习借鉴。 3、本资源作为“参考资料”如果需要实现其他功能,...
NULL 博文链接:https://ynshun.iteye.com/blog/993435
用Servlet实现的echarts展示两种不同形式图表的小demo,使用的开发工具是eclipse,数据库是mysql。文件中包含项目源码,对应的数据库,以及项目运行后实现的图表截图(含url)。项目本人亲测,可完美展示图表,若有...
通过jsp实现的新闻管理系统其中包括增删该查,和mysql的结合应用,利用eclipse开发,文件都很全。
视频格式是exe的,这个使用的是屏幕录像专家录像生成...本案例使用jsp+servlet+mysql实现图书商城,适合初学者使用,本教程一共分为六个视频完成所有的功能操作,大家需要下载六个视频,这个六个视频是完整的贯穿案例。
Java实现HTTP连接与浏览,Java源码下载,输入html文件地址或网址,显示页面和HTML源文件,一步步的实现过程请下载本实例的Java源码,代码中包括丰富的注释,对学习有帮助。 Java实现的FTP连接与数据浏览程序 1个...
NULL 博文链接:https://doujun1998.iteye.com/blog/1758708