一个使用Servlet文件实现文件下载的实例

(可以扩充本实例实现:对用户隐藏他要下载文件的路径,或者在下载文件时要做一些其他的工作,如检查用户有没有下载此文件的权限等)

了解在Servlet中如何控制输出流以及response对象的contentType相关知识

一个Servlet文件DownloadFile,在此Servlet中读取要下载的文件,然后写到响应流中以达到用户下载文件的目的。要下载的文件可以放在任何地方,并且是对用户隐藏的。

在DownloadFile Servlet中,首先要得到要下载文件的文件名filename,同时要预先定义好文件保存的路径,然后设置response对象的内容类型和头信息,最后读取要下载文件的字节流并写到response的输出流中。

DownloadFile.java源文件

package myservlet;

import java.io.*;

import javax.servlet.*;

import javax.servlet.http.*;

public class DownloadFile extends HttpServlet {

//字符编码

private final String ENCODING="GB2312";

//内容类型

private final String CONTENT_TYPE="text/html;charset=gb2312";

//要下载的文件存放的路径

private String downloadfiledir="d:\\temp\\";

public void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException{

//设置request对象的字符编码

request.setCharacterEncoding(ENCODING);

//从request中取出要下载文件的名字

String filename=request.getParameter("filename");

if(filename==null||filename.trim().equals("")){

//设置response对象的ContentType

response.setContentType(CONTENT_TYPE);

//输出错误信息

PrintWriter out=response.getWriter();

out.println("<font color=red>输入的文件名无效!</font>");

out.close();

}else{

//下载文件的完整路径名

String fullfilename=downloadfiledir+filename;

System.out.println("下载文件:"+fullfilename);

//根据文件的类型设置response对象的ContentType

String contentType=getServletContext().getMimeType(fullfilename);

if(contentType==null)

contentType="application/octet-stream";

response.setContentType(contentType);

//设置response的头信息

response.setHeader("Content-disposition","attachment;filename=\""+filename+"\"");

InputStream is=null;

OutputStream os=null;

try{

is=new BufferedInputStream(new FileInputStream(fullfilename));

//定义输出字节流

ByteArrayOutputStream baos=new ByteArrayOutputStream();

//定义response的输出流

os=new BufferedOutputStream(response.getOutputStream());

//定义buffer

byte[] buffer=new byte[4*1024]; //4k Buffer

int read=0;

//从文件中读入数据并写到输出字节流中

while((read=is.read(buffer))!=-1){

baos.write(buffer,0,read);

}

//将输出字节流写到response的输出流中

os.write(baos.toByteArray());

}catch(IOException e){

e.printStackTrace();

}finally{

//关闭输出字节流和response输出流

os.close();

is.close();

}

}

}

public void doPost(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException{

//调用doGet()方法

doGet(request,response);

}

}

一个使用Servlet文件实现文件下载的实例的更多相关文章

  1. Servlet 文件上传

    Servlet 可以与 HTML form 标签一起使用,来允许用户上传文件到服务器.上传的文件可以是文本文件或图像文件或任何文档. 本文使用到的文件有: 创建一个文件上传表单 下面的 HTML 代码 ...

  2. BootStrap fileinput.js文件上传组件实例代码

    1.首先我们下载好fileinput插件引入插件 ? 1 2 3 <span style="font-size:14px;"><link type="t ...

  3. Servlet文件上传下载

    今天我们来学习Servlet文件上传下载 Servlet文件上传主要是使用了ServletInputStream读取流的方法,其读取方法与普通的文件流相同. 一.文件上传相关原理 第一步,构建一个up ...

  4. C#计算文件的MD5值实例

    C#计算文件的MD5值实例 MD5 是 Message Digest Algorithm 5(信息摘要算法)的缩写,MD5 一种散列(Hash)技术,广泛用于加密.解密.数据签名和数据完整性校验等方面 ...

  5. 用idea写servlet文件

    1:File->Project Structure 加号处添加tomcat api(在lib目录下) 2:写servlet文件 src->new servlet写好类名和包名 3:配置we ...

  6. ServletFileUpload(Servlet文件上传)

    //**文件上传** form表单提交必须指定Enctype 属性指定将数据回发到服务器时浏览器使用的编码类型"multipart/form-data" //1.创建磁盘文件项目工 ...

  7. Servlet文件上传(ServletFIleUpload,DiskFileItemFactory,FileItem)

    1:我们学的是表单文件上传,就是在一个FORM中提交相应的信息,和之前我们的提交的注册信息之类的表单是不同的,所以要先改变一下FORM的属性,enctype="multipart/form- ...

  8. java实现文件批量导入导出实例(兼容xls,xlsx)

    1.介绍 java实现文件的导入导出数据库,目前在大部分系统中是比较常见的功能了,今天写个小demo来理解其原理,没接触过的同学也可以看看参考下. 目前我所接触过的导入导出技术主要有POI和iRepo ...

  9. 一周一个小demo — 前端后台的交互实例

    这一周呢,本K在大神的指导下,完成了一个利用ajax与php文件上传处理相结合的一个留言板功能的小实例,下面就让本K来带大家瞅瞅如何实现这一种功能. 一.界面概览 首先我们来看一下这个小demo的具体 ...

随机推荐

  1. 重启Windows的PowerShell

    这么简单的一个命令都单独写一篇blog, 是不是太无耻了? 好吧, 谁让咱不会呢. 学会了就来一篇. 呵呵. Restart-Computer   来源 ================ http:/ ...

  2. asp.net网站发布

    1.iis里面新建一个网站,目录可以新建(例如:F:\dotNetWeb),还可以创建子文件夹如:F:\dotNetWeb\my,网站路径是可以自己设置的,也可以使用IIS默认的网站. 2.vs201 ...

  3. 必须记住的 30 类 CSS 选择器

    大概大家读知道`id`,`class`以及`descendant`选择器,并且整体都在使用它们,那么你正在错误拥有更大级别的灵活性的选择方式.这篇文章里面提到的大部分选择器都是在CSS3标准下的,所以 ...

  4. 【Java】Java-UTC-时间戳处理

    Java-UTC-时间戳处理 java utc 时间戳_百度搜索 JAVA获取时间戳,哪个更快 - 潇湘客 - ITeye博客 Java获取UTC时间的方法详解_java_脚本之家 Java UTC时 ...

  5. Spark 以及 spark streaming 核心原理及实践

    收录待用,修改转载已取得腾讯云授权 作者 | 蒋专 蒋专,现CDG事业群社交与效果广告部微信广告中心业务逻辑组员工,负责广告系统后台开发,2012年上海同济大学软件学院本科毕业,曾在百度凤巢工作三年, ...

  6. Hadoop vs Spark性能对比

    http://www.cnblogs.com/jerrylead/archive/2012/08/13/2636149.html Hadoop vs Spark性能对比 基于Spark-0.4和Had ...

  7. 浅谈APP流式分页服务端设计(转)

    http://www.jianshu.com/p/13941129c826 a.cursor游标式分页 select * from table where id >cursor limit pa ...

  8. Kafka:ZK+Kafka+Spark Streaming集群环境搭建(九)安装kafka_2.11-1.1.0

    如何搭建配置centos虚拟机请参考<Kafka:ZK+Kafka+Spark Streaming集群环境搭建(一)VMW安装四台CentOS,并实现本机与它们能交互,虚拟机内部实现可以上网.& ...

  9. Java-JUC(四):同步容器介绍

    同步容器简介 针对容器我们知道有HashMap,HashTable,其中HashMap是一个非线程安全的,HashMap在并发执行put操作时会引起死循环,导致CPU利用率接近100%.因为多线程会导 ...

  10. Git创建分支/GIT提交分支

    git clone xxx.git cd fwspp-react git init touch README.md git add README.md git commit -m "add ...