HttpServlet实现下载文件,重要的设置header,否则浏览器无法解析为下载。

Header示例:

1:response.setContentType("application/pdf");//说明实体主体内容的媒体类型

2:response.addHeader("Content-Disposition","attachment; filename=" + URLEncoder.encode(file.getName(), "UTF-8"));//文件解析为下载还是内嵌显示

3:response.setHeader("Content-Length", String.valueOf(length)); //表示实体主体部分的大小

如下示例:

package com.daxin;import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.URLEncoder;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;/*** Servlet implementation class DownLoadFile*/
public class DownLoadFile extends HttpServlet {private static final long serialVersionUID = 1L;/*** @see HttpServlet#HttpServlet()*/public DownLoadFile() {super();// TODO Auto-generated constructor stub
    }/*** @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse*      response)*/protected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {File file = new File("C:\\Coding\\servlet_fie_upload\\aa.flv");if (file.exists()) {FileInputStream in = new FileInputStream(file);// 1:设置http header信息为pdf解析方式// response.setContentType("application/pdf");// 1.设置文件ContentType类型,这样设置,会自动判断下载文件类型response.setContentType("multipart/form-data"); //相对比较通用
response.addHeader("Content-Disposition","attachment; filename=" + URLEncoder.encode(file.getName(), "UTF-8"));response.setHeader("Content-Length", String.valueOf(in.available()));// 2:BufferedInputStream br = null;BufferedOutputStream bw = null;try {br = new BufferedInputStream(in);bw = new BufferedOutputStream(response.getOutputStream());byte[] buffer = new byte[1024];int bufferSize = 0;while (-1 != (bufferSize = br.read(buffer))) {bw.write(buffer, 0, bufferSize);}} catch (Exception e) {e.printStackTrace();} finally {if (bw != null)bw.close();if (in != null)in.close();if (br != null)br.close();}}}/*** @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse*      response)*/protected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}}

1: Web开发中下载文件时,我们一般设置Content-Disposition告诉浏览器下载文件的名称,是否在浏览器中内嵌显示. Content-disposition: inline; filename=foobar.pdf表示浏览器内嵌显示一个文件

2:Content-disposition: attachment; filename=foobar.pdf表示会下载文件

前端页面:

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<%String path = request.getContextPath();String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()+ path + "/";
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<base href="<%=basePath%>">
<title>Insert title here</title>
</head>
<body><a href="DownLoadFile">下载文件</a>
</body>
</html>

转载于:https://www.cnblogs.com/leodaxin/p/7510563.html

Http实现文件下载相关推荐

  1. ini文件怎么使用_ftp文件下载工具,ftp文件下载工具是怎么使用的?使用指南

    ftp文件下载工具是什么工具,可能有人会回答说不知道,因为一般只有从事网站管理的工作者会使用的多一点.但不是每个人生来就会的,所以刚开始肯定都会学习怎么使用.这篇文章就来教一下大家ftp文件下载工具是 ...

  2. 在ASP.NET中跟踪和恢复大文件下载

    在Web应用程序中处理大文件下载的问题一直出了名的困难,因此对于大多数站点来说,如果用户的下载被中断了,它们只能说悲哀降临到用户的身上了.但是我们现在不必这样了,因为你可以使自己的ASP.NET应用程 ...

  3. Apache,Nginx,Lighttpd分别使用X-sendfile功能提升文件下载性能

    关于mod_xsendfile https://tn123.org/mod_xsendfile/ Lighttpd中的X-sendfile RoR网站如何利用lighttpd的X-sendfile功能 ...

  4. java 文件下载 【学习记录】

    工具类 public static Boolean downloadExcelFile(HttpServletResponse response, String fileName) {OutputSt ...

  5. python写一个文件下载器_Python3使用TCP编写一个简易的文件下载器

    原标题:Python3使用TCP编写一个简易的文件下载器 利用Python3来实现TCP协议,和UDP类似.UDP应用于及时通信,而TCP协议用来传送文件.命令等操作,因为这些数据不允许丢失,否则会造 ...

  6. node简单实现excel文件下载

    1.利用csv格式兼容实现 csv是一种利用','.'\t'.'\n'等分隔符存储的文本文件,excel可兼容打开,利用此原理,代码实现如下: app.use(route.get('/export', ...

  7. java ftp下载文件源码_java实现ftp文件下载的源代码

    这几天做的一个项目中用到了ftp文件传输,用java实现了ftp文件的下载. 一.win7下搭建ftp服务器 详见:http://jingyan.baidu.com/article/4b52d7026 ...

  8. 使用C++基于Socket编程实现文件下载(改进-封装成类)

    使用: (1)首先运行服务端,待服务端运行起来: (2)最后运行客户端,输入要传输文件到哪个目标机器的IP地址: (3)输入传输文件的路径及文件(完成的路径),其中包含文件的类型,也就是后缀需要包含( ...

  9. 使用C++基于Socket编程实现文件下载

    使用: (1)首先运行服务端,待服务端运行起来: (2)最后运行客户端,这里使用目标机器IP地址是本机: (3)输入下载文件的路径及文件(完成的路径),其中包含文件的类型,也就是后缀需要包含(代表需要 ...

  10. struts2的文件上传和文件下载

    实现使用Struts2文件上传和文件下载: 注意点: (1)对应表单的file1和私有成员变量的名称必须一致 <input type="file" name="fi ...

最新文章

  1. tomcat访问webapp下面工程的文件含有软连接
  2. Linux网络服务_邮件服务器-Redhat Enterprise 5.9
  3. Maven学习总结(16)——深入理解maven生命周期和插件
  4. 2021年已经过去了4天,创业者、负债累累而希望通过再创业实现东山再起者,你们准备的怎么样了?
  5. DataGrid相邻行有相同内容时对指定列合并和C#可以实现DLL库的动态调用
  6. [Python3] 010 字符串:给你们看看我的内置方法 第二弹
  7. 病毒周报(081208至081214)
  8. 《深入理解计算机系统》第七章学习笔记
  9. SQL数据分析之基础语法的注意事项与妙用【MySQL补充】
  10. Springboot 集成 Camunda
  11. spring aop分析(一)
  12. Sketch for Mac (矢量绘图软件) v81.1
  13. ios 常用的30个动画效果
  14. 用python做一张图片_用 Python 生成一张有“内涵”的图片
  15. speedoffice(word)如何修改段落间距
  16. 工业机器人 郝卫东_智能保安巡逻机器人论文
  17. 使用jQuery制作图书简介
  18. android从入门到精通-项目实战(心得及源码)
  19. 基于JavaSwing开发模拟电梯系统+分析报告 课程设计 大作业源码
  20. LoadLibrary下错误返回126错误码排查过程

热门文章

  1. 0-13 sudo用户管理
  2. 《延世大学韩国语教程2》第十九课 生病(下)
  3. java单例模式和HashMap的线程安全
  4. 计算机的各种英语名称,计算机设备名称英语词汇
  5. python 爬取网页内容 snmp_python通过SNMP协议收集服务器监控信息
  6. RocketMQ(十三)——实战-普通消息的发送与消费
  7. 数据分析与挖掘建模实战001:导学,概述
  8. 河北省计算机网络技术专接本考什么,河北计算机专接本考什么
  9. matlab 0x1表示什么意思,(x ^ 0x1)!= 0是什么意思?(What does (x ^ 0x1) != 0 mean?)
  10. 鸿蒙设备开发环境搭建-2021-3