核心代码:

DataSet ds = dBll.GetList("ID=" + ID);
string docName = "a.doc";//文件名,
        byte[] file = (byte[])ds.Tables[0].Rows[0]["FContent"]; //   "FContent"类型为image
        string Type = checktype(docName);
        Response.AddHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(docName, System.Text.Encoding.UTF8).Replace("+", "%20"));
        Response.AddHeader("Content-Length ", file.Length.ToString());
        Response.ContentType = Type;
        Response.BinaryWrite(file);//可以下载二进制文件,如数据库存的image
        //Response.WriteFile(fliePath);可以下载路径文件
          Response.End();
        Response.Clear();
 
/// <summary>
/// 根据文件的扩展名来获取对应的“输出流的HTTP MIME“类型
/// </summary>
/// <param name="filename"></param>
/// <returns></returns>
private string checktype(string filename)
{
    string ContentType;
    switch (filename.Substring(filename.LastIndexOf(".")).Trim().ToLower())
    {
        case ".asf ":
            ContentType = "video/x-ms-asf ";
            break;
        case ".avi ":
            ContentType = "video/avi ";
            break;
        case ".doc ":
            ContentType = "application/msword ";
            break;
        case ".zip ":
            ContentType = "application/zip ";
            break;
        case ".xls ":
            ContentType = "application/vnd.ms-excel ";
            break;
        case ".gif ":
            ContentType = "image/gif ";
            break;
        case ".jpg ":
            ContentType = "image/jpeg ";
            break;
        case "jpeg ":
            ContentType = "image/jpeg ";
            break;
        case ".wav ":
            ContentType = "audio/wav ";
            break;
        case ".mp3 ":
            ContentType = "audio/mpeg3 ";
            break;
        case ".mpg ":
            ContentType = "video/mpeg ";
            break;
        case ".mepg ":
            ContentType = "video/mpeg ";
            break;
        case ".rtf ":
            ContentType = "application/rtf ";
            break;
        case ".html ":
            ContentType = "text/html ";
            break;
        case ".htm ":
            ContentType = "text/html ";
            break;
        case ".txt ":
            ContentType = "text/plain ";
            break;
        default:
            ContentType = "application/octet-stream ";
            break;
    }
    return ContentType;
}

HttpUtility.UrlEncode(docName, System.Text.Encoding.UTF8).Replace("+", "%20"));这个可以解决中文文件名中包含空格的问题,UrlEncode编码后会把文件名中的空格转换中+(+转换为%2b),但是浏览器是不能理 解加号为空格的,所以在浏览器下载得到的文件,空格就变成了加号;
解决办法:UrlEncode 之后, 将 “+” 替换成 “%20″,因为浏览器将%20转换为空格

  

response下载文件 (转载)的更多相关文章

  1. Struts2学习笔记--使用Response下载文件和Struts2的StreamResult文件下载

    使用Response下载文件,servlet中的文件下载是通过流来实现的   我在webRoot文件夹下新建了一个文件夹from,里边放了一张图片,这里就以下载这张图片为例:download.jsp很 ...

  2. servlet 中通过response下载文件

    public class ResponseDemo3 extends HttpServlet { private static final long serialVersionUID = -52329 ...

  3. ajax请求不能下载文件(转载)

    最近在做文件下载,后台写了个控制层,直接走进去应该就可以下载文件,各种文件图片,excel等 但是起初老是下载失败,并且弹出下面的乱码: 前台请求代码: $('#fileexcel').unbind( ...

  4. ajax中没法用response下载文件啊

    ajax 下载不太现实第一,http 不支持直接的二进制传输,二进制数据需要编码 例如base64 ,这点服务器端可以实现第二,客户端获得编码后的文件要转换,js应该也可以第三点,最为致命,js无法操 ...

  5. response 下载文件

    String basePath = "D://test.json"; String filename = basePath.substring(basePath.lastIndex ...

  6. ASP.NET Response 下载文件

    private void DownLoad(string fileName, string path) { FileInfo fi = new FileInfo(path); if (fi.Exist ...

  7. response 下载文件火狐浏览器文件名乱码问题

    string path = Server.MapPath(Url.Content("~/") + "UploadFiles/Template/");       ...

  8. Ajax下载文件(页面无刷新)

    说明:Ajax是无法实现文件传输的,本文只是模拟了Ajax不刷新页面就可以请求并返回数据的效果.实质上还是通过提交form表单来返回文件流的输出. 分步实现逻辑: ajax请求服务器,访问数据库,根据 ...

  9. Servlet 上传下载文件

    上传文件 1)在表单中使用表单元素 <input type=“file” />,浏览器在解析表单时,会自动生成一个输入框和一个按钮 2)表单需要上传文件时,需指定表单 enctype 的值 ...

随机推荐

  1. Android实现归属地查询功能

    实现归属地查询大体有两种方法可以实现,一种是通过归属地API进行查询,另一种是查询本地数据库.两种方法各有优劣,最好结合起来使用,我本次采用的是查询数据库的方法.首先需要从网上下载归属地数据库call ...

  2. [课程设计]Scrum 1. 8多鱼点餐系统开发进度(完善整个订餐页面工作)

    [课程设计]Scrum 1. 8多鱼点餐系统开发进度(完善整个订餐页面工作) 1.团队名称:重案组 2.团队目标:长期经营,积累客户充分准备,伺机而行 3.团队口号:矢志不渝,追求完美 4.团队选题: ...

  3. Knights of the Round Table-POJ2942(双连通分量+交叉染色)

    Knights of the Round Table Description Being a knight is a very attractive career: searching for the ...

  4. 视频 之自定义VideoView

    package com.lvshandian.partylive.view;import android.content.Context;import android.util.AttributeSe ...

  5. Android 获取全部应用

      package com.lvshandian.menshen.download;import android.content.Context;import android.content.Inte ...

  6. caffe ubuntu16安装报错和程序总结

    我最近安装安装了老版本的caffe,安装过程真是两个字"想死",所以我的错误一般都是比较经典的. 我是使用cuda的版本,所以可能会出现undefined refference t ...

  7. 用unity3d+cardboard开发一个全景图片查看器

    一.建立全景播放场景: 建立一个unity项目,并建立videoplay场景,在场景中拖入一个球体,将全景照片拉到球体上,自动形成material和texture. 二.创建一个新的表面着色器,并修改 ...

  8. Windows server 2012 AD DS 搭建步骤

    服务器版本:Windows server 2012 1.  配置网络,由于本机会搭建DNS服务器,因此首选DNS服务器设置为127.0.0.1 2.  打开服务器管理器 3.  点击添加角色和功能,下 ...

  9. src url href uri的区别和联系

  10. Web服务器amp搭建