1. 下载概述

  • 下载就是向客户端响应字节数据! 将一个文件变成字节数组, 使用 response.getOutputStream()

    来响应给浏览器!!

2. 下载要求

  1. 两个头一个流

    • Content-Type: 传递给客户端的文件的 MIME 类型;

      可以使用文件名称调用 ServletContext 的 getMimeType() 方法, 得到 MIME 类型!
    • Content-Disposition:attachment;filename=xxx:

      它的默认值为 inline, 表示在浏览器窗口中打开! attachment 表示附件, filname 后面跟随的是显示在

      下载框中的文件名称!
    • 流:要下载的文件数据!

3. 具体代码

    // 下载
public class DownloadServlet extends HttpServlet{
public void doGet(HttpServletRequest request, HttpServletResponse resp)
throws ServletException,IOException{ String filename = "F:浮夸.mp3"; //根据文件名获取 MIME 类型
String contentType = this.getServletContext().getMimeType(filename); String contentDisposition = "attachment;filename=a.mp3"; // 输入流
FileInputStream input = new FileInputStream(filename); // 设置头
resp.setHeader("Content-Type",contentType);
resp.setHeader("Content-Disposition",contentDisposition); // 获取绑定了客户端的流
ServletOutputStream output = resp.getOutputStream(); // 把输入流中的数据写入到输出流中
IOUtils.copy(input,output);
input.close();
}
}

4. 下载文件编码问题

  1. 显示在下载框中为中文名称时,会出现乱码

    • FireFox: Base64 编码;
    • 其他大部分浏览器: URL 编码.
  2. 通用方案: filename = new String(filename.getBytes("GBK"),"ISO-88859-1");

参考资料:

JavaWeb 之文件下载的更多相关文章

  1. javaWeb项目-文件下载的消息头和编码问题

    一.问题: 做web项目经常提到的一个需求就是页面的文件下载,那么下载的时候在后台为什么要设置响应消息头?为什么这样设置? 二.解决: 1.例子 //设置响应的消息头response.setConte ...

  2. IT兄弟连 JavaWeb教程 文件下载技术

    ●  列出提供下载的文件资源 我们要将Web应用系统中的文件资源提供给用户进行下载,首先我们要有一个页面列出上传文件目录下的所有文件,当用户点击文件下载超链接时就进行下载操作,编写一个ListFile ...

  3. JavaWeb实现文件下载

    1. 编写文件上传Servlet public class FileUpload1 extends HttpServlet { @Override protected void doGet(HttpS ...

  4. 文件名含中文的JavaWeb文件下载

    在javaweb项目中实现文件下载,当文件名中包含中文文字时,需要进行如下的处理,才能在浏览器端正常显示中文文件名: response.setContentType("octets/stre ...

  5. [javaweb]javaweb中HttpServletResponse实现文件下载,验证码和请求重定向功能

    HttpServletResponse web服务器接受到客户端的http请求之后,针对这个请求,分别创建一个代表请求的httpServletRequest和代表响应的HttpServletRespo ...

  6. JavaWeb文件下载,提示用户保存而不是让浏览器直接打开

    1.通过HttpServletResponse对象实现文件下载 服务端向客户端游览器发送文件时,如果是浏览器支持的文件类型,一般会默认使用浏览器打开,比如txt.jpg等,会直接在浏览器中显示,如果需 ...

  7. javaweb文件下载

    最近搞了一下struts文件上传下载了,一个是通过struts自带的类实现的下载方法,一个是通用的下载方法: struts实现: FileDownloadAction.java package com ...

  8. javaweb通过接口来实现多个文件压缩和下载(包括单文件下载,多文件批量下载)

    原博客地址:https://blog.csdn.net/weixin_37766296/article/details/80044000 将多个文件压缩并下载下来:(绿色为修改原博客的位置) 注意:需 ...

  9. javaweb简单的实现文件下载

    public HttpServletResponse download(HttpServletRequest request, HttpServletResponse response) throws ...

随机推荐

  1. UnicodeEncodeError: ‘gbk’ codec can’t encode character u’\u200e’ in position 43: illegal multibyte sequence

    [问题] python中已获取网页: http://blog.csdn.net/hfahe/article/details/5494895 的html源码,其时UTF-8编码的. 提取出其标题部分: ...

  2. Caused by: org.hibernate.boot.registry.selector.spi.StrategySelectionException: Unable to resolve name [org.hibernate.cache.ehcache.EhCacheRegionFactory] as strategy [org.hibernate.cache.spi.RegionFac

    警告: Exception encountered during context initialization - cancelling refresh attempt: org.springfram ...

  3. tcp/ip ---IP路由选择

    从概念上说, I P路由选择是简单的,特别对于主机来说.如果目的主机与源主机直接相连(如点对点链路)或都在一个共享网络上(以太网或令牌环网),那么I P数据报就直接送到目的主机上.否则,主机把数据报发 ...

  4. 完美运动框架(js)

    一.前言 学习js运动时,由于在实现多种不同运动效果过程中很多代码是重复的,故将其封装达到代码重用. 二.代码封装重用 function startMove(obj, json, fnEnd){ cl ...

  5. linux杂谈(十一):LDAPserver的搭建

    1.LDAP简单介绍      今天我们来介绍LDAPserver的搭建和client的訪问,可是基本的问题在前者.首先我们要知道什么是LDAP.      在日常交谈中.你可能会听到有些人这么说:& ...

  6. Android 4.4 全套源代码及子模块源代码的下载方法

    博文<Android源代码下载--用git clone实现单个文件夹下载>介绍了採用git clone方法下载Android单个文件夹源代码的方法,这篇文章已经有四年的历史,这期间Goog ...

  7. C语言指针解说

    指针是C语言的一种数据类型.类似于C中的其它类型,比如int ,char 等.既然指针是一种类型,当我们定义该类型变量.该类型变量就称为指针变量. C中有了指针就有了指向. 指向:指针变量指向本身保存 ...

  8. struts2的validate在使用过程中的一个问题

    在项目中有一个新增客户信息的的功能:  1.在进入加入页面:add.jsp页面之前,要调用一个add_init.do来获取省份信息列表以供在add.jsp进行选择. 2.add页面填写完毕以后.提交给 ...

  9. https原理与实践

    HTTPS 原理与证书实践   分类: Web应用   1.1 网络安全知识 1.1.1 网结安全出现背景 网络就是实现不同主机之间的通讯,网络出现之初利用TCP/IP协议簇的相关协议概念,已经满足了 ...

  10. android属性动画之ValueAnimator

    楼主前段时间做一个android项目,其中一个需求是需要制作一个动画,但是之前楼主没接触过android动画,所以在网上搜了下,并且也有人推荐可以试下用属性动画,所以我就百度了下属性动画怎么用,并顺便 ...