disposition

      该文为堕落的天使不再来原创。欢迎转载。
    在尽心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);
    }

时间: 2024-10-25 05:25:28

disposition的相关文章

iOS开发网络篇—文件的上传

iOS开发网络篇—文件的上传 说明:文件上传使用的时POST请求,通常把要上传的数据保存在请求体中.本文介绍如何不借助第三方框架实现iOS开发中得文件上传. 由于过程较为复杂,因此本文只贴出部分关键代码. 主控制器的关键代码: YYViewController.m 1 #import "YYViewController.h" 2 3 #define YYEncode(str) [str dataUsingEncoding:NSUTF8StringEncoding] 4 5 @inter

根据76大细分词性对单词进行归组(二)

词性的重要性不言而喻,尤其是对于自然语言处理来说,哪怕就是记单词,根据词性对单词进行归组也是非常有帮助的. superword是一个Java实现的英文单词分析软件,主要研究英语单词音近形似转化规律.前缀后缀规律.词之间的相似性规律等等. 各大词性及其包括的词: 32.N-COUNT-COLL(可数集合名词) (词数:50) 1 aristocracy army array audience band 2 cast chapter command commission committee 3 co

[WebApi] 捣鼓一个资源管理器--文件下载

<打造一个网站或者其他网络应用的文件管理接口(WebApi)第一章--之-- "文件下载" > ======================================================== 作者:qiujuer 博客:blog.csdn.net/qiujuer 网站:www.qiujuer.net 开源库:Genius-Android 转载请注明出处:blog.csdn.net/qiujuer/article/details/41621781 =====

express 中文文档

express() 创建一个express应用程序 var express = require('express'); var app = express(); app.get('/', function(req, res){ res.send('hello world'); }); app.listen(3000); Application app.set(name, value) 将设置项 name 的值设为 value app.set('title', 'My Site'); app.ge

Bottle 框架源码学习 三

def run(app=None, server='wsgiref', host='127.0.0.1', port=8080,         interval=1, reloader=False, quiet=False, plugins=None,         debug=None, **kargs): 今天要学习一下bottle里是怎样打印debug信息的 run函数的倒数第二个参数是debug,默认为None try:     if debug is not None: _debu

笔记:Struts2 文件上传和下载

为了上传文件必须将表单的method设置为POST,将 enctype 设置为 muiltipart/form-data,只有设置为这种情况下,浏览器才会把用户选择文件的二进制数据发送给服务器. 上传解析器配置 Struts2 没有提供自己的请求解析器,struts2 需要调用其他上传框架来解析二进制数据,struts2 默认使用 jakarta 的 Common-FileUpload 的文件上传框架,需要在 Web 应用的 lib 中增加 commons-io-2.2.jar 和 common

AFNetWorking3.0使用 自签名证书的https请求

前几日,项目组出于安全角度的考虑,要求项目中的请求使用https请求,因为是企业内部使用的app,因此使用了自签名的证书,而自签名的证书是不受信任的,所以我们就需要自己来做证书的验证,包括服务器验证客户端的证书和我们要信任服务器的证书,SSL双向认证的原理我这里就不赘述了,这里提供两篇博客 iOS安全系列之一:HTTPS: http://oncenote.com/2014/10/21/Security-1-HTTPS/ iOS安全系列之二:HTTPS进阶: http://oncenote.com

Codeforces Round #328 (Div. 2) A

Description Galois is one of the strongest chess players of Byteforces. He has even invented a new variant of chess, which he named «PawnChess». This new game is played on a board consisting of 8 rows and 8 columns. At the beginning of every game som

struts2(二)

1:Stream <result-type name="stream" class="org.apache.struts2.result.StreamResult"/> A custom Result type for sending raw data (via an InputStream) directly to the HttpServletResponse. Very useful for allowing users to download c