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 深克隆_Java实现深克隆的两种方式
序列化和依次克隆各个可变的引用类型都可以实现深克隆,但是序列化的效率并不理想 下面是两种实现深克隆的实例,并且测试类对两种方法进行了对比: 1.重写clone方法使用父类中的clone()方法实现深克 ...
- websocket java 例子_java 实现websocket的两种方式实例详解
目录 一.介绍 1.两种方式,一种使用tomcat的websocket实现,一种使用spring的websocket 2.tomcat的方式需要tomcat 7.x,JEE7的支持. 3.spring ...
- Java中线程的创建有两种方式
Java中继承thread类与实现Runnable接口的区别 Java中线程的创建有两种方式: 1. 通过继承Thread类,重写Thread的run()方法,将线程运行的逻辑放在其中 2. 通过 ...
- PHP实现文件下载的两种方式(GuzzleHttp和Curl)
PHP实现文件下载的两种方式分别使用GuzzleHttp扩展和Curl扩展来实现.本例以下载PDF文件为例,实际上大家可以举一反三下载其他文件格式是一样的. 1.使用GuzzleHttp 扩展库 us ...
- java 读取css文件_java文件读取的两种方式
JAVA中读取文件(二进制,字符)内容的几种方 JAVA中读取文件内容的方法有很多,比如按字节读取文件内容,按字符读取文件内容,按行读取文件内容,随机读取文件内容等方法,本文就以上方法的具体实现给出代 ...
- java创建线程并命名_Java创建线程的两种方式
前言 多线程是我们开发过程中经常遇到的,也是必不可少需要掌握的.当我们知道需要进行多线程开发时首先需要知道的自然是如何实现多线程,也就是我们应该如何创建线程. 在Java中创建线程和创建普通的类的对象 ...
- java的websocket_java 实现websocket的两种方式实例详解
一.介绍 1.两种方式,一种使用tomcat的websocket实现,一种使用spring的websocket 2.tomcat的方式需要tomcat 7.x,JEE7的支持. 3.spring与we ...
- Java Spark之创建RDD的两种方式和操作RDD
首先看看思维导图,我的spark是1.6.1版本,jdk是1.7版本 spark是什么? Spark是基于内存计算的大数据并行计算框架.Spark基于内存计算,提高了在大数据环境下数据处理的实时性, ...
- Java中类加载器获取的两种方式
import org.junit.Test;import java.io.FileInputStream; import java.io.IOException; import java.io.Inp ...
最新文章
- CJIS安全政策:企业如何确保FIPS合规性?
- CPU内核配置(一):通用内核配置
- google套件_Google 推出 3 款语音识别应用,想用 AI 帮语言障碍者说话
- 互联网 4 大发明之二维码,你如何使用 Python 生成二维码?
- 使用 Newtonsoft.Json; 序列化正常,反序列化异常的一点思考
- jmeter学习指南之聚合报告
- [转]完美解决IE(IE6/IE7/IE8)不兼容HTML5标签的方法
- js父元素获取子元素img_css,前端_父标签div中包含一个子元素img标签,子元素div标签,为什么img要加上浮动,子元素div才会处于正常位置?,css,前端 - phpStudy...
- Javascript---条件运算符
- mmap文件映射与缺页异常 | 图
- vue 组件 not defined_Vue、Spring Boot开发小而完整的Web前后端分离项目实战10
- 电脑word在哪_永中PDF转WORD在线文档转换器——无需会员、没有限制
- 安卓运行linux命令mux,都能看懂的嵌入式linux/android alsa_aplay alsa_amixer命令行用法...
- 关于我学前端一年的体验(心得)
- 自称骇客的基本都是骗子
- 凑微分公式_第一换元积分法(13种常用的凑微分公式)☀成考·高数二辅导
- 习惯养成app_如何培养优秀的开发人员沟通技巧,养成不良习惯
- material-table的使用
- JCA - 核心类和接口 - Cipher类
- 攻防世界writeup
热门文章
- 请解释自动装配模式的区别?_如何从齿条优化方面有效节约机床装配时间
- oracle undo段的作用,Oracle数据库中Undo数据段的作用及类型
- TIM怎么更新版本 TIM检查更新版本教程
- 爱奇艺怎么开启从列表删除时同时删除本地文件
- 微软发布全新3D Emoji表情系统:与Win11的UI风格一致
- java6虚拟机_Java 虚拟机之六:javap工具
- GIT commit问题 No errors and 30 warnings found. Would you like to review them?
- matlab fgetl用法,Matlab fgetl strsplit 函数
- linux密文解密工具,Linux之加密解密工具openssl的用法以及自建CA
- elasticsearch scroll 一页最大数据量_elasticsearch 百亿级数据检索案例与原理