http下载文件(常用方式+支持在线打开方式)
1、常见的方式:
public HttpServletResponse download(String path, HttpServletResponse response) {
try {
// path:下载的文件的路径。
File file = new File(path);
// 取得文件名。
String filename = file.getName();
// 取得文件的后缀名。
String ext = filename.substring(filename.lastIndexOf(".") + 1).toUpperCase();
// 以流的形式下载文件。
InputStream fis = new BufferedInputStream(new FileInputStream(path));
byte[] buffer = new byte[fis.available()];
fis.read(buffer);
fis.close();
// 清空response
response.reset();
// 设置response的Header
response.addHeader("Content-Disposition", "attachment;filename=" + new String(filename.getBytes()));
response.addHeader("Content-Length", "" + file.length());
OutputStream toClient = new BufferedOutputStream(response.getOutputStream());
response.setContentType("application/octet-stream");
toClient.write(buffer);
toClient.flush();
toClient.close();
} catch (IOException ex) {
ex.printStackTrace();
}
return response;
}
public void downloadLocal(HttpServletResponse response) throws FileNotFoundException {
// 下载本地文件
String fileName = "Operator.doc".toString(); // 文件的默认保存名
// 读到流中
InputStream inStream = new FileInputStream("c:/Operator.doc");// 文件的存放路径
// 设置输出的格式
response.reset();
response.setContentType("bin");
response.addHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
// 循环取出流中的数据
byte[] b = new byte[100];
int len;
try {
while ((len = inStream.read(b)) > 0)
response.getOutputStream().write(b, 0, len);
inStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public void downloadNet(HttpServletResponse response) throws MalformedURLException {
// 下载网络文件
int bytesum = 0;
int byteread = 0;
URL url = new URL("windine.blogdriver.com/logo.gif");
try {
URLConnection conn = url.openConnection();
InputStream inStream = conn.getInputStream();
FileOutputStream fs = new FileOutputStream("c:/abc.gif");
byte[] buffer = new byte[1204];
int length;
while ((byteread = inStream.read(buffer)) != -1) {
bytesum += byteread;
System.out.println(bytesum);
fs.write(buffer, 0, byteread);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
2、支持在线打开文件的一种方式:
public void downLoad(String filePath, HttpServletResponse response, boolean isOnLine) throws Exception {
File f = new File(filePath);
if (!f.exists()) {
response.sendError(404, "File not found!");
return;
}
BufferedInputStream br = new BufferedInputStream(new FileInputStream(f));
byte[] buf = new byte[1024];
int len = 0;
response.reset(); // 非常重要
if (isOnLine) { // 在线打开方式
URL u = new URL("file:///" + filePath);
response.setContentType(u.openConnection().getContentType());
response.setHeader("Content-Disposition", "inline; filename=" + f.getName());
// 文件名应该编码成UTF-8
} else { // 纯下载方式
response.setContentType("application/x-msdownload");
response.setHeader("Content-Disposition", "attachment; filename=" + f.getName());
}
OutputStream out = response.getOutputStream();
while ((len = br.read(buf)) > 0)
out.write(buf, 0, len);
br.close();
out.close();
}
3、工作中:
//org.springframework.http.ResponseEntity
public ResponseEntity<byte[]> downloadFile(HttpServletRequest request, String path) {
try {
File file = new File(path);
InputStream inputStream = new FileInputStream(file);
byte[] bytes = new byte[inputStream.available()];
inputStream.read(bytes);
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.add("Content-Disposition", "attchement;filename=" + file.getName());
HttpStatus statusCode = HttpStatus.OK;
return new ResponseEntity<byte[]>(bytes, httpHeaders, statusCode);
} catch (Exception e) {
return new ResponseEntity("", new HttpHeaders(), HttpStatus.BAD_GATEWAY);
}
}
http下载文件(常用方式+支持在线打开方式)相关推荐
- 野火串口调试助手Linux,野火串口调试助手 支持在线安装方式,永远保持最新版本
持常用的110-1152 联合开发网 - pudn.com...
野火串口调试助手 所属分类:人工智能/神经网络/深度学习 开发工具:Java 文件大小:1036KB 下载次数:0 上传日期:2020-11-07 19:58:05 上 传 者:潮吧刘京 说明: 支 ...
- post方式下载文件ie8不支持
post方式下载文件ie8不支持 以前有一篇jQuery下载文件的文章post方式下载文件,最近在进行测试的时候发现ie8这个老伙计还是不好用啊.查找错误找到这个问题进行修改后是这样的. 当然,依然需 ...
- 使用a标签下载文件,浏览器会直接打开解决方案
使用a标签下载文件,浏览器会直接打开解决方案 背景 一.HTML中的a标签实现点击下载 二.即使使用a标签的download属性,chrome浏览器还是会打开 三.解决方案 解决方案一:使用ajax请 ...
- Servlet下载文件迅雷不支持问题真相之一
问题描述 最近在做一个下载文件的Servlet,直接使用浏览器的下载功能,完美支持,结果测试人员使用迅雷下载,就不行了,下载也能成功完成,只是迅雷下载的文件大小是悲催的0KB 真相搜罗 网上有很多帖子 ...
- js下载文件、音频、视频的方式
下载文件可以直接通过a标签的href属性直接下载,也可以通过Blob对象转换为文件流进行下载.如果要对大数据量或者需要分片下载.上传等操作,可以考虑Blob对象.同事Blob对象可以对下载过程进行额外 ...
- js下载文件、音频、视频的方式 vue
1.a标签下载文件 // 这是传统的下载方式 const downloadFileA = document.createElement('a') document.body.append(downlo ...
- java打开pdf文件_[原创]java在线打开PDF文档
步骤一:(涉及到的工具) 访问:http://www.zhuozhengsoft.com/dowm/,从官网下载PageOffice for Java. 步骤二:(配置工程) 1. 解压PageOff ...
- IDEA使用过程中相应的配置和设置(如编码设置、窗口调整以及config.xml文件模板创建、工程打开方式、约束文件)
1. IDEA调整工具栏的位置(原来在右边,现在调整到左边),[View]-->[Appearance]-->[Toolbar] 2. IDEA调整代码区背景([File]-->[S ...
- 将某一类型文件还原为无默认打开方式
原谅我的强迫症,无意中把.json文件设置成了默认了notepad打开方式,于是看到了满屏的notepad图标.我还是喜欢看清爽的图标,于是百度了好久,终于找到了将其还原为无默认打开方式的方法: 简而 ...
- .bat文件改为windows默认打开方式
有的时候不小心将后缀名.bat文件在选择打开方式时误勾选了用记事本或者其他文本编辑器打开, 结果电脑上的*.bat文件的打开方式都变成了记事本或者其他文本编辑器. 本方法就是恢复.bat文件的默认打开 ...
最新文章
- 谷歌排名第一的编程语言,死磕它这两点,小白也能学的会!不信你看!
- 剑指offer十九之顺时针打印矩阵
- Luogu4606 SDOI2018 战略游戏 圆方树、虚树、链并
- linux 相册管理,图片管理(时间线、相册管理)- 深度看图 -Deepin深度系统用户手册...
- python 9.13作业
- 小妲己智能机器人要连接wifi吗_“能扫能拖,聪明能干”,360扫地机器人S7一周体验分享...
- rac san+oracle_Oracle11g1+RAC+install+for+CentOS5(ASM+to+FC+SAN)_IT168文库
- 计算机学科技术前沿:互联网上信息可信性的现状
- MVC防止xss攻击 ——Html.AntiForgeryToken的AJAX提交
- phpcmsV9 添加内容:如何“增加复选框、下拉菜单”(含案例、截图)- 教程篇
- 【今日CV 计算机视觉论文速览 143期】Mon, 15 Jul 2019
- HDU3786 找出直系亲属【关系闭包】
- Atlassian JIRA 插件开发之一 环境搭建
- 推荐4个爬虫抓包神器
- 360面试java经验_360测试开发技术面试题目
- 正则表达式提取身份证号码
- AD学习之旅(1)— Altium Designer 16 软件下载与安装
- 高中信息技术教资-笔记-存储容量之间的换算关系
- 听说你要删库跑路了?这篇Linux脚本请收好
- CHM 格式打开不显示网页
热门文章
- 博科光纤交换机维护手册
- 树莓派网易云音乐播放器
- java实现的身份证照片脸部识别(头像截图) 以及OCR字体识别
- 老男孩python全栈视频教程_老男孩Python全栈7期,Flask全套组件及原理剖析视频教程下载...
- Vuex2.0小米便签项目实例
- java毕业设计外卖管理系统mybatis+源码+调试部署+系统+数据库+lw
- 自己生成aar包时,含有第三方依赖,导入项目使用
- VS2013/SQL SERVER 产品密钥
- 删除win10易升更新的办法
- 中艺人脸识别考勤机使用方法_中控人脸识别考勤机说明书 人脸识别考勤机的使用方法...