特殊字符亂碼問題如出現&和空格之類的字符
測試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);