• 火狐浏览器下载文件中文乱码,文件名中的空格变加号("+")的问题


    解决一下问题:

    1、火狐浏览器下载文件,中文变乱码

    2、IE浏览器下载文件,丢失文件扩展名或强制扩展名为".txt"

    3、浏览器下载文件,文件名中的空格变成加号("+"),测试过程中chrome,firefox,ie均出现此问题

    参考https://stackoverflow.com/questions/93551/how-to-encode-the-filename-parameter-of-content-disposition-header-in-http

     1 string fileFullName = @"D:新建 Microsoft Word 文档.docx"; //文件绝对路径
     2 string fileName = Path.GetFileName(fileFullName);
     3 using (FileStream stream = new FileStream(fileFullName, FileMode.Open, FileAccess.Read, FileShare.Read))
     4 {
     5     //指定块大小  
     6     long chunkSize = 102400;
     7     //建立一个100K的缓冲区  
     8     byte[] buffer = new byte[chunkSize];
     9     //未读的字节数  
    10     long dataToRead = stream.Length;
    11 
    12     //添加Http头  
    13     string contentDisposition;
    14     if (Request.Browser.Browser == "IE" && (Request.Browser.Version == "7.0" || Request.Browser.Version == "8.0"))
    15     {
    16         contentDisposition = "attachment;filename=" + Uri.EscapeDataString(fileName);
    17     }
    18     else if (Request.Browser.Browser == "Safari")
    19     {
    20         contentDisposition = "attachment;filename=" + fileName;
    21     }
    22     else
    23     {
    24         contentDisposition = "attachment;filename*=UTF-8''" + Uri.EscapeDataString(fileName);
    25     }
    26     //Response.AddHeader("Content-Disposition", contentDisposition);
    27 
    28     HttpContext.Current.Response.ContentType = "application/octet-stream";
    29     HttpContext.Current.Response.AddHeader("Content-Disposition", contentDisposition);
    30     HttpContext.Current.Response.AddHeader("Content-Length", dataToRead.ToString());
    31 
    32     while (dataToRead > 0 && HttpContext.Current.Response.IsClientConnected)
    33     {
    34         int length = stream.Read(buffer, 0, (int)chunkSize);
    35         HttpContext.Current.Response.BinaryWrite(buffer);
    36         HttpContext.Current.Response.Flush();
    37         HttpContext.Current.Response.Clear();
    38 
    39         dataToRead -= length;
    40     }
    41     HttpContext.Current.Response.Close();
    42 }
  • 相关阅读:
    访友
    幼儿园分班
    求一个数的平方根
    计数器
    连续数组的最大和
    给定一个权重数组,实现一个带权重的路由策略
    两个超长字符串相加
    参数解析(得到输入参数)
    对字符串中的所有单词进行倒排。
    推荐PHP程序员进阶的好书
  • 原文地址:https://www.cnblogs.com/harmonyboy/p/7822195.html
Copyright © 2020-2023  润新知