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 java.net.URLEncoder;
import javax.servlet.http.HttpServletResponse;
import org.springframework.util.StringUtils; /**
* 文件下载
*/
public class FileLoad { /**
* 使用response返回文件流
*/
public void loadFile(String filePath, HttpServletResponse response) {
// 声明工具类
BufferedInputStream in = null;
BufferedOutputStream out = null; try {
// 若路径为空
if (StringUtils.isEmpty(filePath)) {
throw new Exception("invalid filepath of null.");
} // 没找到文件
File file = new File(filePath);
if (!file.exists()) {
throw new Exception("file not exist in path [" + filePath + "]");
} // 获取文件名
String fileName = file.getName(); // 输出文件流到浏览器
in = new BufferedInputStream(new FileInputStream(filePath));
out = new BufferedOutputStream(response.getOutputStream());
response.setContentType("application/x-download;charset=utf-8");
response.setHeader("Content-disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8")); byte[] buffer = new byte[8192];
int count = 0;
while ((count = in.read(buffer, 0, 8192)) != -1) {
out.write(buffer, 0, count);
} out.flush();
file = null;
} catch (Exception e) {
e.printStackTrace();
} finally {
closeStream(in, out);
}
} /**
* 关闭输入输出流
*/
public void closeStream(InputStream in, OutputStream out) {
if (null != in) {
try {
in.close();
} catch (IOException e) {
// e.printStackTrace();
}
}
if (null != out) {
try {
out.close();
} catch (IOException e) {
// e.printStackTrace();
}
}
} }

HttpServletResponse实现文件下载的更多相关文章

  1. [javaweb]javaweb中HttpServletResponse实现文件下载,验证码和请求重定向功能

    HttpServletResponse web服务器接受到客户端的http请求之后,针对这个请求,分别创建一个代表请求的httpServletRequest和代表响应的HttpServletRespo ...

  2. response小结(二)——文件下载

    我们先来看一个最简单的文件下载的例子: package com.yyz.response; import java.io.FileInputStream; import java.io.IOExcep ...

  3. ServletContext对象

    **1 ServletContext对象   1)在web应用中,由服务器创建的唯一的一个对象是ServletContext   2)ServletContext对象在每一个Servlet中取得都是相 ...

  4. Web---演示Servlet的相关类、下载技术、线程问题、自定义404页面

    Servlet的其他相关类: ServletConfig – 代表Servlet的初始化配置参数. ServletContext – 代表整个Web项目. ServletRequest – 代表用户的 ...

  5. spring mvc velocity多视图

    1.ViewResolverUrlBasedViewResolver 这个东西是根据url 进行路由的.网上搜了 1.order 排序,同名出现各种问题 2.XmlViewResolver,BeanN ...

  6. Java文件下载:如何编码文件名称以及如何设置HttpServletResponse

    在下载文件时,经常遇到文件名乱码等问题. 本文说明如何编码文件名,以及如何设置HttpServletResponse对象. 1,如何编码文件名 String userAgent = request.g ...

  7. [转]【HttpServlet】HttpServletResponse接口 案例:完成文件下载

    创建时间:6.19 & 6.24 1.案例-完成文件下载 1)  什么情况下会文件下载? 浏览器不能解析的文件就下载 *使用a标签直接指向服务器上的资源 2)什么情况下需要在服务端编写文件下载 ...

  8. Struts2学习笔记--使用Response下载文件和Struts2的StreamResult文件下载

    使用Response下载文件,servlet中的文件下载是通过流来实现的   我在webRoot文件夹下新建了一个文件夹from,里边放了一张图片,这里就以下载这张图片为例:download.jsp很 ...

  9. java web学习总结(七) -------------------HttpServletResponse对象(一)

    Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象.和代表响应的response对象.request和response对象即然代表请求和响应,那我们要 ...

随机推荐

  1. Sklearn线性回归

    Sklearn线性回归 原理 线性回归是最为简单而经典的回归模型,用了最小二乘法的思想,用一个n-1维的超平面拟合n维数据 数学形式 \[y(w,x)=w_0+w_1x_1+w_2x_2+-+w_nx ...

  2. HDU 2000 ASCII码排序

    题目链接:HDU 2000 Description 输入三个字符后,按各字符的ASCII码从小到大的顺序输出这三个字符. Input 输入数据有多组,每组占一行,有三个字符组成,之间无空格. Outp ...

  3. ios真机中Text组件出现多余边框

    问题 ios真机中Text组件出现多余边框(模拟器不会出现,真机会出现该问题). 原因 在ios启动页设置中,预设的尺寸要求与设置中图片尺寸不符合导致屏幕精度计算出现问题(启动屏分辨率错误设置会导致手 ...

  4. plsql 工具怎样导出 oracle 表结构

    一.双击 plsql 工具,输入登陆用户.登陆密码以及登陆数据库名称,如下图: 二.菜单 Tools --> Export User Objects...,如下图: 三.进入导出界面后,可以选择 ...

  5. GMA Round 1 极坐标的愤怒

    传送门 极坐标的愤怒 我也想被积分啊!可是为什么你们从来不知道我的心意!——极坐标 愤怒会夺走理智,哪怕是被迫的也好,请为极坐标方程$r=t$(也写作$ρ=θ$)积分吧. 为了考验你的忠诚,你需要回答 ...

  6. JAVA自学笔记26

    JAVA自学笔记26 1.网络编程 1)用来实现网络互联的不同计算机上运行的程序可以进行数据交换 2)网络模型一般泛指 OSI:(Open System Interconnection)开放系统互联参 ...

  7. Aizu2170 Marked Ancestor(并查集)

    https://vjudge.net/problem/Aizu-2170 并查集用于管理元素分组情况. 建树pre[]记录父节点,一开始只有结点1被标记了,所以find()最终得到的根都是1. 如果遇 ...

  8. 【小y设计】二维码条形码打印编辑器

    条码打印,价格标签打印,需要对打印进行排版,于是设计了一个简单的编辑器 支持条码二维码打印进行编辑排版,支持文字.图片.条码.二维码.直线,能自由拖拉,删除,并可保存为模版. 界面如下 (下载Demo ...

  9. embOS ARM and Cortex Library Object and Symbol List

    OS_Alloc.o OS_free OS_Alloc.o OS_malloc OS_Alloc.o OS_realloc OS_ARM720_MMU.o OS_ARM720_CACHE_CleanR ...

  10. C# 发送消息SendKeys、SendMessage、keybd_event的用法

    一.C#中SendKeys的用法 功能:将一个或多个按键消息发送到活动窗口,就如同在键盘上进行输入一样. 语法: SendKeys.Send(string keys); SendKeys.SendWa ...