该文为堕落的天使不再来原创。欢迎转载。
    在尽心web开发时,可能遇到以下几种需求:(disposition配置)

  • 希望某类或者某已知MIME 类型的文件(比如:*.gif;*.txt;*.htm)能够在访问时弹出“文件下载”对话框。
  • 希望客户端下载时以指定文件名显示。
  • 希望某文件直接在浏览器上显示而不是弹出文件下载对话框。

对于上面的需求,使用Content-Disposition属性就可以解决。下面是代码示例:

 response.setHeader("Content-disposition", "attachment;filename=" + fileName)。
  //Content-disposition为属性名。
 //attachment表示以附件方式下载。
如果要在页面中打开,则改为inline。
 //filename如果为中文,则会出现乱码。解决办法有两种: 
//1、使用fileName = new String(fileName.getBytes(), "ISO8859-1")语句
/* 验证content-disposition */
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String path = this.getServletContext().getRealPath("/picture/桌面壁纸.jpg");
String fileName = path.substring(path.indexOf("\\") + 1);
//1、使用fileName = new String(fileName.getBytes(), "ISO8859-1")语句
fileName = new String(fileName.getBytes(),"ISO8859-1");
// response开始发送响应头
response.setHeader("content-disposition", "attachment;filename="
+ fileName); // 基本的流操作
OutputStream out = null;
FileInputStream in = null;
try {
in = new FileInputStream(path);// 绝对路径
out = response.getOutputStream();
byte[] buf = new byte[1024];
int len;
while ((len = in.read(buf)) != -1) {
out.write(buf, 0, len);
}
} finally {
if (in != null) {
try {
// 关闭流
in.close();
} catch (Exception e) {
e.printStackTrace();
}
}
if (out != null) {
try {
// 关闭流
out.close();
} catch (Exception e) {
e.printStackTrace();
}
} }
} public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { doGet(request, response);
}
//2、使用 URLEncoder.encode(fileName,"UTF-8" 语句
    public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String path = this.getServletContext().getRealPath(
"/picture/桌面壁纸.jpg");
String fileName = path.substring(path.lastIndexOf("\\") + 1);
// System.out.println(fileName);//桌面壁纸.jpg
/*response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");*///这样是错误的
// 发送响应头,如果文件是中文名,这要经过url编码
response.setHeader("Content-disposition", "attachment;filename="
+ URLEncoder.encode(fileName,"UTF-8")); // 下载图片
OutputStream out = null;
FileInputStream in = null;
try {
in = new FileInputStream(path);// 绝对路径
out = response.getOutputStream();
byte[] buf = new byte[1024];
int len;
while ((len = in.read(buf)) != -1) {
out.write(buf, 0, len);
}
} finally {
if(in != null){
try{
// 关闭流
in.close();
}catch(Exception e){
e.printStackTrace();
}
}
if(out != null){
try{
// 关闭流
out.close();
}catch(Exception e){
e.printStackTrace();
}
} } } public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}

disposition的更多相关文章

  1. RMA Sales Order – Stuck with “Awaiting Return Disposition”

    RMA Sales Order – Stuck with "Awaiting Return Disposition"                     Action : (P ...

  2. RMA Sales Order – Stuck with “Awaiting Return Disposition”

    RMA Sales Order – Stuck with “Awaiting Return Disposition” Action : (Prod) ð  Login to Unix ð  su – ...

  3. SDWebImage源码解读之SDWebImageDownloaderOperation

    第七篇 前言 本篇文章主要讲解下载操作的相关知识,SDWebImageDownloaderOperation的主要任务是把一张图片从服务器下载到内存中.下载数据并不难,如何对下载这一系列的任务进行设计 ...

  4. 【原】AFNetworking源码阅读(三)

    [原]AFNetworking源码阅读(三) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 上一篇的话,主要是讲了如何通过构建一个request来生成一个data tas ...

  5. 【NLP】Python NLTK获取文本语料和词汇资源

    Python NLTK 获取文本语料和词汇资源 作者:白宁超 2016年11月7日13:15:24 摘要:NLTK是由宾夕法尼亚大学计算机和信息科学使用python语言实现的一种自然语言工具包,其收集 ...

  6. C#发送邮箱

    之前自己从来没有做过发送邮箱的功能,前段时间项目需要,在找了很多帖子之后,终于实现了. 之后有整理了一下,写了一个类.直接给类传递信息,就可以发送了. 这里还需要说明的是,发送邮箱需要开通POP3/S ...

  7. NSURLSession详解

    导语 现在NSURLConnection在开发中会使用的越来越少,iOS9已经将NSURLConnection废弃,现在最低版本一般适配iOS7,所以也可以使用. NSURLConnection相对于 ...

  8. iOS开发系列--Swift进阶

    概述 上一篇文章<iOS开发系列--Swift语言>中对Swift的语法特点以及它和C.ObjC等其他语言的用法区别进行了介绍.当然,这只是Swift的入门基础,但是仅仅了解这些对于使用S ...

  9. .NET开发邮件发送功能的全面教程(含邮件组件源码)

    今天,给大家分享的是如何在.NET平台中开发“邮件发送”功能.在网上搜的到的各种资料一般都介绍的比较简单,那今天我想比较细的整理介绍下: 1)         邮件基础理论知识 2)         ...

随机推荐

  1. Mac 配置Spark环境scala+python版本(Spark1.6.0)

    1. 从官网下载Spark安装包,解压到自己的安装目录下(默认已经安装好JDK,JDK安装可自行查找): spark官网:http://spark.apache.org/downloads.html ...

  2. Linux下的五个查找命令:grep、find、locate、whereis、which

    原文转自 http://www.cnblogs.com/wanqieddy/archive/2011/07/15/2107071.html 1.grep grep(General Regular Ex ...

  3. [c++] vector的使用

     }     {      vec.push_back(value);  }     {      vector<     vector<,);       vector<, sec ...

  4. ecshop后台分页浅析

      既然是分页,道理都是一样的,不过ecshop前台分页的函数和后台分页的函数不同,后台分页函数为page_and_size(),在admin/includes/lib_main.php里.都是用aj ...

  5. 百度地图helloworld程序问题

    按照百度开发者平台[http://developer.baidu.com/map/index.php?title=androidsdk/guide/retrieval]的开发指南,完整编写代码ok之后 ...

  6. 05_动手动脑之String.equals()方法的实现代码

    Question: 请查看String.equals()方法的实现代码,注意学习其实现方法. Answer: java中的String.equals()方法的实现代码: equals()法是根类Obj ...

  7. zip伪加密文件分析(进阶版)

    作者近日偶然获得一misc题,本来以为手到擒来,毕竟这是个大家都讨论烂了的题,详情访问链接http://blog.csdn.net/ETF6996/article/details/51946250.既 ...

  8. win10 localhost 解析为 ipv6地址 ::1 的解决办法

    今天遇到个奇怪的问题,localhost 访问时提示 not found 404,但是有127.0.0.1可以访问.最后找到原因,是因为 windows 把 localhost 解析为 ipv6 地址 ...

  9. jquery对象和dom对象的相互转换

    更好的学习jquery,要区分好jquery对象和dom对象的区别. 先具体说说dom.举个例子 <html> <head></head> <body> ...

  10. JVM 参数分配

    http://stackoverflow.com/questions/41216388/java-jvm-parameter-xms-doesnt-take-effect-immediately It ...