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();

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/563302.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

uinty粒子系统子物体变大_Unity的粒子系统(一)基础篇

简介闲来无事,仔细的学习一下粒子系统,也当是给自己做个笔记方便之后进行回顾。引擎版本:Unity2018.3创建一个ParticleSystem创建方式:1、Hierarchy-->Effects-->ParticleSystem第一种创建方式创建结果2、gameObject-->A…

java字符串string_Java字符串String方法总结

Java字符串创建与初始化实例。Java字符串String方法总结,包括字符串的大小写替转换,获取字符串长度的方法、截取字符串,去除字符串中的空格、StringBuffer类转换成String类等:java创建并初始化字符串的方法:1、使用字符…

java定义返回码常量_码出规范(四)常量定义

01各位屏幕前的读者朋友大家早上中午晚上凌晨好,本文是《码出规范》专题的第四篇,文中参考阿里巴巴最新发布的《Java开发手册》,结合《springboot2.x独门秘籍》专题中的项目开发进度,学以致用,让你在开发中码出高效&am…

centos下载mysql_python数据分析之路——centos下载并配置mysql与navicat的使用

python数据分析之路——centos下载并配置mysql与navicat的使用在之前的文章中已经说明了如何购买并配置一台自己的服务器,那么在安装完anaconda之后,为了之后方便用Django进行网站开发与数据分析,需要对数据库进行配置,那么在数据…

php数组遍历相同的元素覆盖_php获取数组中重复数据的两种方法

搜索热词代码如下:PHPfunction FetchRepeatMemberInArray($array) {// 获取去掉重复数据的数组$unique_arr array_unique ( $array );// 获取重复数据的数组$repeat_arr array_diff_assoc ( $array,$unique_arr );return $repeat_arr;} // 测试用例$array array (apple,ipho…

mysql 解压缩安装_[mysql] MySQL解压缩安装步骤

以前装的MySQL出问题了,只好卸载了。又下载了一个mysql-5.6.24-win32.1432006610.zip。msi文件直接安装就行了。这里需要解压到指定目录,配置后可使用。环境变量配置:在 mysql根目录下修改 my-default.ini :# These are commonly set, remove…

php过滤多空格_php正则过滤html标签、空格、换行符的代码(附说明)

$strpreg_replace("/\s/", " ", $str); //过滤多余回车$strpreg_replace("/$strpreg_replace("//si","",$str); //注释$strpreg_replace("//si","",$str); //过滤DOCTYPE$strpreg_replace("//si",…

mysql+json插入_MySQL对JSON数据的增删改查

MySQL从5.7版本开始就支持JSON格式的数据,操作用起来挺方便的。建表在新建表时字段类型可以直接设置为json类型,比如我们创建一张表:CREATE TABLE test_user (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR ( 50 ) NOT NULL,info JSON);js…

java手机象棋软件下载,Java手机网络版象棋游戏附源码JAVA游戏源码下载

运行于手机上的中国象棋游戏,鉴于JAVA J2ME技术,本游戏分服务端和客户端,导入JAR包即可在手机上运行,内有开发文档和运用说明。Java手机网络版象棋游戏附源码(1 folders, 2 files, 1.38 KB, 727.25 KB in total.) 源码(…

mysql数据库如何创建表_mysql数据库如何创建数据表

mysql数据库创建数据表的方法是:可以通过CREATE TABLE语句来创建,基本语法:【CREATE TABLE ([表定义选项])[表选项][分区选项];】。要注意的是,创建数据表不能使用SQL语言中的关键字。在 MySQL 中,可以使用 CREATE TAB…

导航无限级菜单 java,Element NavMenu 无限级菜单

数据结构menudata.json{"data":[{"id": 1,"path": "/home","menuName": "商业数据统计","component": "Home","childMenu":[{"id": 2,"path": "/commerc…

mysql 主从一致性_mysql 主从一致性保证

MySQL 主备的基本原理MySQL 主备切换流程.png主备同步流程图备库 B 跟主库 A 之间维持了一个长连接。主库 A 内部有一个线程,专门用于服务备库 B 的这个长连接。一个事务日志同步的完整过程是这样的:在备库 B 上通过 change master 命令,设置…

php study是什么,phpstudy与wamp区别的区别是什么?

phpstudyphpstudy是一个php运行环境的集成包,用户不需要去配置运行环境,就可以使用,phpstudy不仅是一款比较好用的php调试环境工具,并且还包括了开发工具和常用手册,对于新手是有很大帮助的。phpstudy集成最新的Apache…

安装了虚拟机后mysql用不了_在虚拟机上安装mysql,安装好了并且初始化之后,一直无法启动mysql如何解决?...

今天想在自己的虚拟机上安装mysql,安装好了并且初始化之后,一直无法启动mysql.1.service mysql start;报错:mysql is neither service nor target!?2.systemctl start mysql:报错:sysemctl start mysql : Failed to star mysql.s…

java全局机制,java实现全局异常机制

先上自己的代码,后整理下原理知识。下面是自己实现的全局异常机制1.继承Exception,自定义异常类​package com.zichen.xhkq.exception;/**** Title: CustomException* Description: 系统自定义的异常类型,实际开发中可能要定义多种异常类型* authorCNZZ*…

mysql8添加索引_MySQL8.0新特性-新的索引方式

三种新的索引方式1、隐藏索引MySQL8.0 支持隐藏索引(invisible index),不可见索引隐藏索引不会被优化器使用,但需要维护。应用场景:软删除、灰度发布。软删除:不确定当前索引是否需要删除的时候,软删除,不会…

mysql crash定位分析_MySQL实例crash的案例详细分析

【问题描述】我们生产环境有一组集群的多台MySQL服务器(MySQL 5.6.21),不定期的会crash,但error log中只记录了重启信息,未记录crash时的堆栈:mysqld_safe Number of processes running now: 0mysqld_safe mysqld restarted接下来…

matlab 读取照片imread,利用matlab读取图像

怎样用matlab读取20张图片并依次展示出来指定路径下 单个文件夹data中所有图像 P .\data\;% 图像文件夹路径 img_path_list dir(strcat(P,*.jpg));%获取该文件夹中所有jpg格式的图像 N length(img_path_list);%获取图像总数量 for j 1:N%逐一读取图像 image_name img_path…

python元素定位input button_python+selenium 定位到元素,无法点击的解决方法

报错selenium.common.exceptions.WebDriverException: Message: Element is not clickable at point (234.75, 22). Other element would receive the click: 需要点击的按钮页面显示不了,需要下拉滚动条,能看到按钮了才能点1、尝试下拉一段滚动条&#…

seo和php哪个容易学,php好学吗?和其它语言比哪个好学?

PHP入门是很简单的,比起C语言来bai说简单许多du而且门槛也不高,只要搭建好服务器zhi环境便能轻松编程,代dao码写好就直接在浏览器看到运行结果,不用像C语言那样编译运行至于你所说的“晦涩的数学题”,个人认为对于入门…