核心代码:

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. MySQL and Postgres command equivalents (mysql vs psql)

    MySQL and Postgres command equivalents (mysql vs psql) 博客分类: Database   From: http://blog.endpoint.c ...

  2. android在全屏下第一次触摸屏幕没有触发事件

    A.设置全屏的方法很多就不多说了,常见如下两种(记录用以备忘): 1.在Androidmanifest.xml文件中设定,如: <activity android:name="com. ...

  3. 覆盖的面积(HDU 1255 线段树)

    覆盖的面积 Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Problem D ...

  4. 【转】malloc与free的底层实现

    本文转自:http://blog.163.com/xychenbaihu@yeah/blog/static/132229655201210975312473/ 如何查看进程发生缺页中断的次数? 用ps ...

  5. JavaScript中的prototype使用说明

    参考 http://abruzzi.iteye.com/blog/1026125 http://www.jb51.net/article/23052.htm

  6. [问题2015S04] 复旦高等代数 II(14级)每周一题(第五教学周)

    [问题2015S04] 设 \(A\) 为 \(n\) 阶方阵, \(C\) 为 \(k\times n\) 矩阵, 且对任意的 \(\lambda\in\mathbb{C}\), \(\begin{ ...

  7. Python3基础 sort(reverse=True) 将一个列表降序排列

    镇场诗:---大梦谁觉,水月中建博客.百千磨难,才知世事无常.---今持佛语,技术无量愿学.愿尽所学,铸一良心博客.------------------------------------------ ...

  8. 。【自学总结 1】------3ds Max 界面

    3ds Max 界面包含4部分(7区域) 4部分:菜单.控制工具.命令面板.窗口区 7区域: 1.标题栏:主要用于显示当前工作文件的名称,可以看到文件存储路径. 2.菜单栏:菜单中的命令如果带有省略号 ...

  9. 断言(ASSERT)的用法

    我一直以为assert仅仅是个报错函数,事实上,它居然是个宏,并且作用并非“报错”. 在经过对其进行一定了解之后,对其作用及用法有了一定的了解,assert()的用法像是一种“契约式编程”,在我的理解 ...

  10. 用Git导出项目

    Git没有SVN的导出功能,不能像 svn export url 那样,将某个版本的代码导出为不带版本控制文件的文件夹.   Git提供了archive命令,可以把版本的文件流导出.   可以将Git ...