zoukankan      html  css  js  c++  java
  • response下载文件 (转载)

    核心代码:

    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转换为空格

      
  • 相关阅读:
    HDU 1402 A * B Problem Plus (FFT)
    CodeForces 935E Fafa and Ancient Mathematics (树形DP)
    HDU 5355 Cake (构造 + 暴力)
    HDU 5360 Hiking (贪心)
    Java高阶回调,回调函数的另一种玩法
    关于git 指令
    Retrofit2 完全解析 探索与okhttp之间的关系
    HTTP中GET与POST的区别
    TCP,IP,HTTP,SOCKET区别和联系
    android 实现类似qq未读消息点击循环显示
  • 原文地址:https://www.cnblogs.com/kingsony/p/3258904.html
Copyright © 2011-2022 走看看