servlet 文件下载
【本文简介】
一个servlet 文件下载 的简单例子。
【文件夹结构】
【java代码】
package com.zjm.www.servlet; import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream; import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; /**
* @描述 servlet 文件下载
* @作者 小M
* @博客 http://www.cnblogs.com/xiaoMzjm/
* @时间 2014/07/30
*/
public class DownLoadServlet extends HttpServlet { private static final long serialVersionUID = 1L; public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request,response);
} public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { // 转码,建议使用过滤器过滤。
request.setCharacterEncoding("UTF8");
response.setCharacterEncoding("UTF8"); // 获取上传文件的 文件名
String fileName = request.getParameter("fileName"); // 文件所放的文件夹,服务器文件相对路径。有关路径问题,请参考另一篇博文:http://www.cnblogs.com/xiaoMzjm/p/3878758.html
String path = request.getServletContext().getRealPath("/")+"\\DownLoadFile\\"; // 下载路径 = 文件所放的文件夹 + 文件名
String downLoadPath = path + fileName; // 创建输入流 连接文件,并把文件 读 到流中
File file = new File(downLoadPath);
InputStream fis = new BufferedInputStream(new FileInputStream(file)); // 判断文件有有多少字节可以读
byte[] buffer = new byte[fis.available()];
fis.read(buffer);
fis.close(); // 清空response
response.reset(); /**
* 设置response的Header,必须设。
* 【几个头文件简介】:
* 1、Content-disposition是MIME协议的扩展,此协议可让浏览器弹出下载框。同时可以改变下载时文件的文件名。
* 2、Content-Length用于描述HTTP消息实体的传输长度。
* 在HTTP协议中,消息实体长度和消息实体的传输长度是有区别,比如说gzip压缩下,消息实体长度是压缩前的长度,消息实体的传输长度是gzip压缩后的长度。
*/
response.addHeader("Content-Disposition", "attachment;filename=" + new String(fileName.getBytes("utf-8"),"ISO-8859-1"));
response.addHeader("Content-Length", "" + file.length());
OutputStream out = new BufferedOutputStream(response.getOutputStream()); /**
* 配置MIME类型,通知浏览器下载的文件的格式。
* 更多 MIME类型 和 后缀名 的映射可在百度文库搜索 : “MIME类型大全” 或者戳中连接:
* http://wenku.baidu.com/link?url=SIJffXFE68HnvhI39h0c0PtjSzz7v8SoYzo274HcEx8jYRm-V07_WkotLQdVnT_JGyNhIUY_bjQRgnfz_b53rg5EnHD_ist84Pq-uWMYjyG
*/
response.setContentType("application/octet-stream"); // 输出
out.write(buffer);
out.flush();
out.close();
}
}
servlet 文件下载的更多相关文章
- java/struts/Servlet文件下载与ftp文件上传下载
1.前端代码 使用超链接到Struts的Action或Servlet <a target="_blank" href="ftpFileAction!download ...
- servlet文件下载2(单文件下载和批量下载)
使用servlet完毕单文件下载和批量文件下载.批量下载的原理是先将文件打包成zip , 然后再下载. 之前也转载过一篇文件下载的博客,地址:http://blog.csdn.net/ch717828 ...
- j2ee,jsp,servlet文件下载server端
1.getOutputStream() has already been called for this response 报错的原因: 使用tomcat容器调用response.getOutputS ...
- servlet文件下载
创建web工程servlet,新建DownloadServlet.java package com.xmyself.servlet; import java.io.File; import java. ...
- servlet文件下载实例剖析
package mypack; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; ...
- Java之Servlet文件下载20190228
jsp页面: <%@ page language="java" contentType="text/html; charset=utf-8" pageEn ...
- HTTP文件下载JAVA后台的实现
HTTP文件的下载后台JAVA代码 1.使用org.apache.http.impl.client.CloseableHttpClient 先上代码: public String downloadFi ...
- servlet和response
servlet基础知识 Servlet在内存中是单例----单实例对象一个Servlet类 在内存中最多有一个对象 一个项目有多少功能,将来就有多少Servlet. servlet是自启动的,就是可以 ...
- SVG2PNG(前台和后台将SVG转换为PNG)--amcharts导出png
在项目中用到了amcharts,amcharts图标统计插件是利用SVG实现的,其自带下载png功能,但是不支持IE以下浏览器.因此研究了SVG转换为png,最终实现的效果是将amcharts生成一张 ...
随机推荐
- Unity 扩展编辑器
扩展Inspector界面 继承自Editor,添加CustomEditorAttribute,传入定制的类型 定制显示的类型要求: 类型中所有的public 字段都会自动暴露给Inspector编辑 ...
- 配置taglib的uri的2种方法
推荐方法1 1.把uri写在tld文件中,tld放在WEB-INF文件夹下,例如: <short-name>就对应了你在jsp中引用的时候<%@ taglib prefix=&quo ...
- Tool bar
Toolbar ADJFToolBar;Button ADJFBackButton; ADJFToolBar = (Toolbar) findViewById(R.id.ADJFToolBar); / ...
- [转]UI、GUI、UE、UX、ID、UED、UCD的区别
UI (User Interface):用户界面 UE (User Experience):用户体验 ID (Interaction design):交互设计 UID (User Interface ...
- 球队以及得分计算的SQL语句
首先题目是这样的: 球队表teams 比赛表matches 赢了得3分,平局的得1分,输了得0分. 思路: 一个球队的成绩分为两部分,作为主队的得分和作为客队的得分: 计算出一次比赛中具体得了多少分, ...
- ecmall 中Url体系改造实践
前面有过一篇ECMall 中URL体系的改造思路http://www.cnblogs.com/x3d/p/3627260.html 这两天基于这个思路,做了实践. 为什么要改造? ECMall是完整的 ...
- 开发高性能的MongoDB应用—浅谈MongoDB性能优化
关联文章索引: 大数据时代的数据存储,非关系型数据库MongoDB 性能与用户量 “如何能让软件拥有更高的性能?”,我想这是一个大部分开发者都思考过的问题.性能往往决定了一个软件的质量,如果你开发的是 ...
- MySQL定义异常和异常处理方法
在MySQL中.特定异常须要特定处理.这些异常可以联系到错误,以及子程序中的一般流程控制.定义异常是事先定义程序运行过程中遇到的问题,异常处理定义了在遇到问题时相应当採取的处理方式.而且保证存储过程或 ...
- EasyUI获取DataGrid中某一列的所有值
function count() { var rows = $('#dg'').datagrid('getRows')//获取当前页的数据行 var total = 0; for (var i = 0 ...
- is_array
is_array (PHP 4, PHP 5) is_array — 检测变量是否是数组