Response下載文件亂碼問題處理

本文介紹了在不同瀏覽器(IE、Chrome、手機瀏覽器、Firefox)中下載文件時遇到的特殊字符亂碼問題及解決方案,特別關注了如何處理文件名中的空格與特殊字符,確保跨平台兼容性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

特殊字符亂碼問題如出現&和空格之類的字符
測試IE,Chrome,手機瀏覽器,Firefox另外一套

 context.Response.ContentType = "application/octet-stream";//下載跟這個關係不大,默認就這樣寫了
 if (context.Request.UserAgent.ToLower().IndexOf("firefox", System.StringComparison.Ordinal) > -1)//firefox浏览器
            {
                context.Response.AddHeader("content-disposition", "attachment;filename=\"" + fileInfo.Name + "\"");
            }
            else {
                context.Response.AddHeader("content-disposition", "filename=" + HttpUtility.UrlPathEncode(fileInfo.Name));//注意此處是UrlPathEncode,如果是UrlEncode也可能出現亂碼比如空格變成加號,如果下載出現相對路徑的(通常Chrome,(文件名含有空格,逗號之類的)可以將文件名加上引號"filename=\"" + HttpUtility.UrlPathEncode(fileInfo.Name) + "\"")
            }  

因為配置信息沒設置導致下載

<system.web>
    <!--maxRequestLength 請求限制10M,requestPathInvalidCharacters請求路徑含特殊字符(&IHttpHandler的下載異常)-->
    <httpRuntime maxRequestLength="10240" requestPathInvalidCharacters=""  requestValidationMode="2.0"/>
   <security>
      <!--A071J+report+11.1-FY 171102.xls這樣的文件下載失敗-->
      <requestFiltering allowDoubleEscaping="true"></requestFiltering>
    </security>

HttpHandler里獲取context.Request.UserAgent可能導致手持設備無法下載
盜鏈下載里使用方法
IHttpHandler

  string Plat = context.Request.Browser.Platform;
   FileInfo fileInfo = new FileInfo(text);
context.Response.ContentType = "application/octet-stream";
if (Plat == "WinNT")
{
     string Agents = context.Request.UserAgent.ToLower();//一旦獲取此值,手持設備無法下載,不知道為啥
     if (Agents.IndexOf("firefox", System.StringComparison.Ordinal) > -1)//firefox浏览器
     {
        context.Response.AddHeader("content-disposition", "attachment;filename=\"" + fileInfo.Name + "\"");
     }
    else
    {
     context.Response.AddHeader("content-disposition", "filename=" + HttpUtility.UrlPathEncode(fileInfo.Name));
    }
}
else
{
//支持手機端下載
     context.Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(fileInfo.Name, Encoding.UTF8));
}
context.Response.WriteFile(text);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值