JAVA下载文件的几_详解Java文件下载的几种实现方式
Java文件下载的几种方式,具体如下:
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();
}
}
//支持在线打开文件的一种方式
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();
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
JAVA下载文件的几_详解Java文件下载的几种实现方式相关推荐
- java sort 第二个参数_详解java Collections.sort的两种用法
Collections是一个工具类,sort是其中的静态方法,是用来对List类型进行排序的,它有两种参数形式: public static > void sort(List list) { l ...
- java list for循环遍历_详解Java中list,set,map的遍历与增强for循环
详解Java中list,set,map的遍历与增强for循环 Java集合类可分为三大块,分别是从Collection接口延伸出的List.Set和以键值对形式作存储的Map类型集合. 关于增强for ...
- java中static修饰函数_详解java中static关键词的作用
在java中,static是一个修饰符,用于修饰类的成员方法.类的成员变量,另外可以编写static代码块来优化程序性能:被static关键字修饰的方法或者变量不需要依赖于对象来进行访问,只要类被加载 ...
- java中的invoke方法_详解Java中Method的Invoke方法
在写代码的时候,发现从父类class通过getDeclaredMethod获取的Method可以调用子类的对象,而子类改写了这个方法,从子类class通过getDeclaredMethod也能获取到M ...
- java遍历是什么意思_详解java中多种通用遍历方式
下面小编就为大家带来一篇java集合遍历的几种方式总结及详细比较.小编觉得挺不错的,现在就分享给大家,也给大家做个参考.一起跟随小编过来看看吧 集合类的通用遍历方式, 用迭代器迭代:Iterator ...
- java继承类型的用法_详解Java中使用externds关键字继承类的用法
理解继承是理解面向对象程序设计的关键.在Java中,通过关键字extends继承一个已有的类,被继承的类称为父类(超类,基类),新的类称为子类(派生类).在Java中不允许多继承. (1)继承 cla ...
- java super关键字的作用_详解Java编程中super关键字的用法
通过用static来定义方法或成员,为我们编程提供了某种便利,从某种程度上可以说它类似于C语言中的全局函数和全局变量.但是,并不是说有了这种便利,你便可以随处使用,如果那样的话,你便需要认真考虑一下自 ...
- java中的values函数_详解java 中valueOf方法实例
case1:Object 对象转String 需要强调的是String.valueOf()方法,当参数为类型是object,且值时null的时候他的处理方式public static String v ...
- java使用集合存储过程_详解java调用存储过程并封装成map
详解java调用存储过程并封装成map 发布于 2020-5-1| 复制链接 摘记: 详解java调用存储过程并封装成map 本文代码中注释写的比较清楚不在单独说明,希望能帮助到大 ...
最新文章
- 二维绘图引擎:圆、半圆、弧线绘制
- hibernate笔记--缓存机制之 一级缓存(session缓存)
- Java中使用JNI调用本地动态库的方法
- android 访问web.py,Appium 测试 Android 时,python 用例调用 Webdriver.remote 后无回应
- 数据结构——树的概述
- ddwrt php,DD-WRT官方支持设备列表_ddwrt
- 做数据分析,别再乱用RFM模型了!
- MYsql数据库练习题
- 80端口和443端口是什么?有什么区别?
- Kettle中关于多数据库链接报表或视图不存在的错误总结
- 2018级《程序设计基础(B)II》期末上机考试 重现--SDUT
- 【Docker学习笔记 一】Docker基本概念及理论基础
- wifi热点创建和自动连接
- 在线API文档、技术文档工具ShowDoc
- Sublime Text 3 -mac版简体中文汉化教程
- Threads and Locks
- STL之string用法详解
- 【详解】位运算符:位逻辑运算符,位移运算符(<<左移,>>右移)
- [Win32]Win32 SDK编程系列文章——键盘输入消息
- mysql服务怎么启动和关闭?
热门文章
- CIKM'2017 最佳论文鉴赏
- Designing Websites for Performance 如何设计高性能网站 Lynda课程中文字幕
- 服务器设计系列 网络模型,网络服务器的结构模型
- 【微信小程序】微信开发者工具的使用
- GTD时间管理 | 高效能人士的工作习惯
- 我是一只IT小小鸟里面牛人的博客
- “我的代码正在被千百万人使用”,MySQL 之父等六大国际数据库掌门人谈如何做数据库!...
- vectorvn1610报价_VECTOR VN1610 +CANOE+CANALYZER
- 深度强化学习——actor-critic算法(4)
- IRT模型进行能力值估计