Java文件下载详解
1.使用HttpServletResponse实现
Servlet代码:
public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {//创建要下载的文件的对象(参数为要下载的文件在服务器上的路径)File serverFile=new File("D:/myText.doc");//设置要显示在保存窗口的文件名,如果文件名中有中文的话,则要设置字符集,否则会出现乱码。另外,要写上文件后缀名String fileName=java.net.URLEncoder.encode("Java编程思想最新版.doc","utf-8");//该步是最关键的一步,使用setHeader()方法弹出"是否要保存"的对话框,打引号的部分都是固定的值,不要改变response.setHeader("Content-disposition","attachment;filename="+fileName);/** 以下四行代码经测试似乎可有可无,可能是我测试的文件太小或者其他什么原因。。。*/response.setContentType("application/msword");//定义下载文件的长度 /字节long fileLength=serverFile.length();//把长整形的文件长度转换为字符串String length=String.valueOf(fileLength);//设置文件长度(如果是Post请求,则这步不可少)response.setHeader("content_Length",length);/**以上内容仅是下载一个空文件*以下内容用于将服务器中相应的文件内容以流的形式写入到该空文件中*///获得一个 ServletOutputStream(向客户端发送二进制数据的输出流)对象OutputStream servletOutPutStream=response.getOutputStream();//获得一个从服务器上的文件myFile中获得输入字节的输入流对象FileInputStream fileInputStream=new FileInputStream(serverFile);byte bytes[]=new byte[1024];//设置缓冲区为1024个字节,即1KBint len=0;//读取数据。返回值为读入缓冲区的字节总数,如果到达文件末尾,则返回-1while((len=fileInputStream.read(bytes))!=-1){ //将指定 byte数组中从下标 0 开始的 len个字节写入此文件输出流,(即读了多少就写入多少)servletOutPutStream.write(bytes,0,len); }servletOutPutStream.close();fileInputStream.close(); }
注1:setContentType(String type)方法里的参数type是指一个用于指定文件内容的MIME类型
常见的MIME类型及含义:
text/html 超文本标记语言文本(.html)
text/plain 普通文本(.txt)
image/gif GIF图形(.gif)
image/jpeg JPEG图形(.jpeg或.jpg)
video/x-msvideo AVI文件(.avi)
application/zip zip压缩包(.zip)
application/msword word文档(.doc)
application/vnd.ms-excel excel文档(.xls)
audio/x-mpeg mp3音乐文件(.mp3)
jsp代码:
<body><center><form action="DownLoadServlet" method="post"><a href="javascript:document.forms[0].submit()">单击下载</a></form></center>
</body>
转载于:https://www.cnblogs.com/xcxcxcxc/p/5541233.html
Java文件下载详解相关推荐
- java 文件下载详解_Java 从网上下载文件的几种方式实例代码详解
废话不多说了,直接给大家贴代码了,具体代码如下所示: package com.github.pandafang.tool; import java.io.BufferedOutputStream; i ...
- 【Java网络编程与IO流】Java之Java Servlet详解
Java网络编程与IO流目录: [Java网络编程与IO流]Java中IO流分为几种?字符流.字节流.缓冲流.输入流.输出流.节点流.处理流 [Java网络编程与IO流]计算机网络常见面试题高频核心考 ...
- Apache Thrift - java开发详解
2019独角兽企业重金招聘Python工程师标准>>> Apache Thrift - java开发详解 博客分类: java 架构 中间件 1.添加依赖 jar <depen ...
- Java泛型详解-史上讲解最详细的,没有之一
目录 1. 概述 2. 一个栗子 3. 特性 4. 泛型的使用 4.1 泛型类 4.2 泛型接口 4.3 泛型通配符 4.4 泛型方法 4.4.1 泛型方法的基本用法 4.4.2 类中的泛型方法 4. ...
- Java虚拟机详解----JVM常见问题总结
[正文] 声明:本文只是做一个总结,有关jvm的详细知识可以参考本人之前的系列文章,尤其是那篇:Java虚拟机详解04----GC算法和种类.那篇文章和本文是面试时的重点. 面试必问关键词:JVM垃圾 ...
- java 泛型详解、Java中的泛型方法、 java泛型详解
本文参考java 泛型详解.Java中的泛型方法. java泛型详解 概述 泛型在java中有很重要的地位,在面向对象编程及各种设计模式中有非常广泛的应用. 什么是泛型?为什么要使用泛型? 泛型,即& ...
- 最详细的java泛型详解
来源:最详细的java泛型详解 对java的泛型特性的了解仅限于表面的浅浅一层,直到在学习设计模式时发现有不了解的用法,才想起详细的记录一下. 本文参考java 泛型详解.Java中的泛型方法. ja ...
- Java异常详解及如何处理
来源:Java异常详解及如何处理 简介 程序运行时,发生的不被期望的事件,它阻止了程序按照程序员的预期正常执行,这就是异常.异常发生时,是任程序自生自灭,立刻退出终止,还是输出错误给用户?或者用C语言 ...
- Java基础——Java NIO详解(一)
一.基本概念 1.I/0简介 I/O即输入输出,是计算机与外界世界的一个借口.IO操作的实际主题是操作系统.在java编程中,一般使用流的方式来处理IO,所有的IO都被视作是单个字节的移动,通过str ...
最新文章
- Spring Cloud Ribbon(服务消费者)
- Cisco H3C 端口汇聚互联
- 【ACM】nyoj_540_奇怪的排序_201308050951
- Replace Pioneer
- Mysql学习总结(70)——MySQL 优化实施方案
- 【主成分分析法】NLPer的断舍离(下篇)
- 盘古搜索:上市是既定策略 寻求股权多元化
- 史上最全因果推断合集-uplift
- JSP 银行网上账户管理系统myeclipse编程java网页
- MLIR深入 —— 转换流程详解(以Toy接入为例)
- uni-app仿饿了么点餐界面 左右菜单联动 滚动时商家信息、广告吸顶、弹窗下滑动关闭
- Android开发需要学什么,技术实现
- 【Qt学习】 一键生成函数注释
- 倾城Q码 倾城梦网 掌上投洽会 掌上6 18首页
- error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file
- 福禄克DTX-1800其配件DTX-CHA002通道适配器CHANNEL更换RJ45插座小记
- hdfs的学习和高可用部署
- echarts字变大_EChart 文字大小调整 饼状图为例
- Matlab figure去白边
- python批量处理网络设备的巡检文本文件,提取关键指标写入表格或数据库
热门文章
- python参数传递_python中的*和**参数传递机制
- JZOJ 5930. 【NOIP2018模拟10.26】山花
- JZOJ 3786. 【NOI2015模拟8.19】图
- 导师 = advisor + supervisor
- 学习操作系统的经典书籍
- BZOJ-几道比较有趣的题目
- KDD 2017 《ReasoNet: Learning to Stop Reading in Machine Comprehension》论文笔记
- ICCV 2017 EAST:《Learning Policies for Adaptive Tracking with Deep Feature Cascades》论文笔记
- 2017年9月2日普级组T2 跳格子
- NOIP2016全国信息学分区普级组 买铅笔(c++版)