servlet 文件下载

【本文简介】

一个servlet 文件下载 的简单例子。

【文件夹结构】

【java代码】

 1 package com.zjm.www.servlet;
 2
 3 import java.io.BufferedInputStream;
 4 import java.io.BufferedOutputStream;
 5 import java.io.File;
 6 import java.io.FileInputStream;
 7 import java.io.IOException;
 8 import java.io.InputStream;
 9 import java.io.OutputStream;
10
11 import javax.servlet.ServletException;
12 import javax.servlet.http.HttpServlet;
13 import javax.servlet.http.HttpServletRequest;
14 import javax.servlet.http.HttpServletResponse;
15
16 /**
17  * @描述 servlet 文件下载
18  * @作者   小M
19  * @博客 http://www.cnblogs.com/xiaoMzjm/
20  * @时间 2014/07/30
21  */
22 public class DownLoadServlet extends HttpServlet {
23
24
25     private static final long serialVersionUID = 1L;
26
27     public void doGet(HttpServletRequest request, HttpServletResponse response)
28             throws ServletException, IOException {
29         doPost(request,response);
30     }
31
32     public void doPost(HttpServletRequest request, HttpServletResponse response)
33             throws ServletException, IOException {
34
35         // 转码,建议使用过滤器过滤。
36         request.setCharacterEncoding("UTF8");
37         response.setCharacterEncoding("UTF8");
38
39         // 获取上传文件的  文件名
40         String fileName = request.getParameter("fileName");
41
42         // 文件所放的文件夹,服务器文件相对路径。有关路径问题,请参考另一篇博文:http://www.cnblogs.com/xiaoMzjm/p/3878758.html
43         String path = request.getServletContext().getRealPath("/")+"\\DownLoadFile\\";
44
45         // 下载路径 = 文件所放的文件夹 + 文件名
46         String downLoadPath = path + fileName;
47
48         // 创建输入流 连接文件,并把文件 读 到流中
49         File file = new File(downLoadPath);
50         InputStream fis = new BufferedInputStream(new FileInputStream(file));
51
52         // 判断文件有有多少字节可以读
53         byte[] buffer = new byte[fis.available()];
54         fis.read(buffer);
55         fis.close();
56
57         // 清空response
58         response.reset();
59
60         /**
61          *  设置response的Header,必须设。
62          *  【几个头文件简介】:
63          *  1、Content-disposition是MIME协议的扩展,此协议可让浏览器弹出下载框。同时可以改变下载时文件的文件名。
64          *  2、Content-Length用于描述HTTP消息实体的传输长度。
65          *    在HTTP协议中,消息实体长度和消息实体的传输长度是有区别,比如说gzip压缩下,消息实体长度是压缩前的长度,消息实体的传输长度是gzip压缩后的长度。
66          */
67         response.addHeader("Content-Disposition", "attachment;filename=" + new String(fileName.getBytes("utf-8"),"ISO-8859-1"));
68         response.addHeader("Content-Length", "" + file.length());
69         OutputStream out = new BufferedOutputStream(response.getOutputStream());
70
71         /**
72          *  配置MIME类型,通知浏览器下载的文件的格式。
73          *  更多   MIME类型  和  后缀名   的映射可在百度文库搜索 : “MIME类型大全” 或者戳中连接:
74          *  http://wenku.baidu.com/link?url=SIJffXFE68HnvhI39h0c0PtjSzz7v8SoYzo274HcEx8jYRm-V07_WkotLQdVnT_JGyNhIUY_bjQRgnfz_b53rg5EnHD_ist84Pq-uWMYjyG
75          */
76         response.setContentType("application/octet-stream");
77
78         // 输出
79         out.write(buffer);
80         out.flush();
81         out.close();
82     }
83 }

servlet 文件下载

时间: 2024-10-08 23:07:28

servlet 文件下载的相关文章

j2ee,jsp,servlet文件下载server端

1.getOutputStream() has already been called for this response 报错的原因: 使用tomcat容器调用response.getOutputStream()方法的时候仅仅可以写二进制文件. 但调用requonse.getWriter()方法时,则仅仅可以在前台打印文本文件. 所以: 假设在jsp页面: outPutStream.flush(); outPutStream.close(); outPutStream=null; respon

j2ee,jsp,servlet文件下载服务器端

1.getOutputStream() has already been called for this response 报错的原因: 使用tomcat容器调用response.getOutputStream()方法的时候只能够写二进制文件. 但调用requonse.getWriter()方法时,则只能够在前台打印文本文件. 所以: 如果在jsp页面: outPutStream.flush(); outPutStream.close(); outPutStream=null; response

java/struts/Servlet文件下载与ftp文件下载

1.前端代码 使用超链接到Struts的Action或Servlet <a target="_blank" href="ftpFileAction!downloadFile.action?transUrl=ftp://10.0.2.1/tazi/a.xml">请点击下载</a> 2.后台代码 Action或Servlet String s1=transUrl; // transUrl是前台接受的参数 s1=s1.substring(6); s

Servlet文件下载

<a href="DownLoadServlet">下载</a> <br/> public class DownLoadServlet extends HttpServlet { public DownLoadServlet() { super(); } public void destroy() { super.destroy(); // Just puts "destroy" string in log // Put your

HTTP文件下载JAVA后台的实现

HTTP文件的下载后台JAVA代码 1.使用org.apache.http.impl.client.CloseableHttpClient 先上代码: public String downloadFile(String src_file, String dest_file) throws Throwable { String fileName = getFileName(src_file); try (CloseableHttpClient httpclient = HttpClients.cr

JavaWeb的各种中文乱码终极解决方法

一.Servlet输出乱码 1. 用servlet.getOutStream字节流输出中文,假设要输出的是String str ="钓鱼岛是中国的,无耻才是日本的". 1.1 若是本地服务器与本地客户端这种就不用说了,直接可以out.write(str.getBytes())可以输出没有问题.因为服务器中用str.getBytes()是采用默认本地的编码,比如GBK.而浏览器也解析时也用本地默认编码,两者是统一的,所以没有问题. 1.1 若服务器输出时用了, out.write(str

JavaWeb的各种中文乱码解决方法

一.Servlet输出乱码 1. 用servlet.getOutStream字节流输出中文,假设要输出的是String str ="钓鱼岛是中国的,无耻才是日本的". 1.1 若是本地服务器与本地客户端这种就不用说了,直接可以out.write(str.getBytes())可以输出没有问题.因为服务器中用str.getBytes()是采用默认本地的编码,比如GBK.而浏览器也解析时也用本地默认编码,两者是统一的,所以没有问题. 1.1 若服务器输出时用了, out.write(str

Servlet学习笔记(九)—— 文件下载

一.文件下载概述 例如图片或者HTML这类静态资源,只要在浏览器中打开正确的网址就可以下载.只要资源放在应用程序目录或者其下的子目录中,但不在WEB-INF下,Servlet/JSP容器就会将资源发送到浏览器.但有的时候,静态资源被保存在应用程序目录之外,或者保存在数据库中,或者有时候你需要控制让某些人能够看到这个资源,同时又要防止其他网站引用它.每当遇到这类情况时,就必须通过编程来发送资源. 通过编程的方式实现文件下载可是让我们有选择的将一个文件发送到浏览器. 为了将资源比如文件发送到浏览器,

Servlet学习笔记(八)—— 文件下载

一.文件下载概述 比如图片或者HTML这类静态资源,仅仅要在浏览器中打开正确的网址就行下载.仅仅要资源放在应用程序文件夹或者其下的子文件夹中,但不在WEB-INF下.Servlet/JSP容器就会将资源发送到浏览器. 但有的时候,静态资源被保存在应用程序文件夹之外,或者保存在数据库中.或者有时候你须要控制让某些人可以看到这个资源,同一时候又要防止其它站点引用它.每当遇到这类情况时,就必须通过编程来发送资源. 通过编程的方式实现文件下载但是让我们有选择的将一个文件发送到浏览器. 为了将资源比方文件