asp.net 文件下载 文件名称乱码 处理~~
2014-08-28 11:56
232 查看
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.IO;
using ElementLibrary.BLL; using ElementLibrary.MODEL; using System.Text; /* * LiuH * Descr:下载处理DownLoadFile.ashx * Addtime:2014/8/26 * LastModifyTime:2014/8/27 */ namespace ElementLibrary.Web.Action { /// <summary> ///DownLoadFile 的摘要描述 /// </summary> public class DownLoadFile : IHttpHandler { ElementDetailBLL elementDetailBLL = new ElementDetailBLL(); public void ProcessRequest(HttpContext context) { string strFunId = context.Request.QueryString["id"].ToString();//获取方法id(元件ID) MODEL.ElementDetailInfo elementDetailInfo = elementDetailBLL.GetAllContent(strFunId);//客户端保存的文件名 string fileName = elementDetailInfo.FileName; string strFilePath = elementDetailInfo.FilePath; string filePath = context.Server.MapPath(strFilePath);//路径 FileInfo fileInfo = new FileInfo(filePath); context.Response.Clear(); context.Response.ClearContent(); context.Response.ClearHeaders(); //解决文件名乱码(LiuH AddTime:2014/8/28) if (context.Request.UserAgent.Contains("MSIE") || context.Request.UserAgent.Contains("msie")) { // 如果客户端使用 Microsoft Internet Explorer,则需要编码 fileName = ToHexString(fileName); } context.Response.AddHeader("Content-Disposition", "attachment;filename=" + fileName); context.Response.AddHeader("Content-Length", fileInfo.Length.ToString()); context.Response.AddHeader("Content-Transfer-Encoding", "binary"); context.Response.ContentType = "application/octet-stream"; context.Response.ContentEncoding = System.Text.Encoding.GetEncoding("utf-8"); context.Response.WriteFile(fileInfo.FullName); context.Response.Flush(); //fileInfo.Delete(); context.Response.End(); }
/// <summary> /// 为字符串中的非英文字符编码 /// </summary> /// <param name="s"></param> /// <returns></returns> public static string ToHexString(string s) { char[] chars = s.ToCharArray(); StringBuilder builder = new StringBuilder(); for (int index = 0; index < chars.Length; index++) { bool needToEncode = NeedToEncode(chars[index]); if (needToEncode) { string encodedString = ToHexString(chars[index]); builder.Append(encodedString); } else { builder.Append(chars[index]); } }
return builder.ToString(); }
/// <summary> ///指定 一个字符是否应该被编码 /// </summary> /// <param name="chr"></param> /// <returns></returns> private static bool NeedToEncode(char chr) { string reservedChars = "$-_.+!*'(),@=&";
if (chr > 127) return true; if (char.IsLetterOrDigit(chr) || reservedChars.IndexOf(chr) >= 0) return false;
return true; }
/// <summary> /// 为非英文字符串编码 /// </summary> /// <param name="chr"></param> /// <returns></returns> private static string ToHexString(char chr) { UTF8Encoding utf8 = new UTF8Encoding(); byte[] encodedBytes = utf8.GetBytes(chr.ToString()); StringBuilder builder = new StringBuilder(); for (int index = 0; index < encodedBytes.Length; index++) { builder.AppendFormat("%{0}", Convert.ToString(encodedBytes[index], 16)); } return builder.ToString(); }
public bool IsReusable { get { return false; } } } }
using ElementLibrary.BLL; using ElementLibrary.MODEL; using System.Text; /* * LiuH * Descr:下载处理DownLoadFile.ashx * Addtime:2014/8/26 * LastModifyTime:2014/8/27 */ namespace ElementLibrary.Web.Action { /// <summary> ///DownLoadFile 的摘要描述 /// </summary> public class DownLoadFile : IHttpHandler { ElementDetailBLL elementDetailBLL = new ElementDetailBLL(); public void ProcessRequest(HttpContext context) { string strFunId = context.Request.QueryString["id"].ToString();//获取方法id(元件ID) MODEL.ElementDetailInfo elementDetailInfo = elementDetailBLL.GetAllContent(strFunId);//客户端保存的文件名 string fileName = elementDetailInfo.FileName; string strFilePath = elementDetailInfo.FilePath; string filePath = context.Server.MapPath(strFilePath);//路径 FileInfo fileInfo = new FileInfo(filePath); context.Response.Clear(); context.Response.ClearContent(); context.Response.ClearHeaders(); //解决文件名乱码(LiuH AddTime:2014/8/28) if (context.Request.UserAgent.Contains("MSIE") || context.Request.UserAgent.Contains("msie")) { // 如果客户端使用 Microsoft Internet Explorer,则需要编码 fileName = ToHexString(fileName); } context.Response.AddHeader("Content-Disposition", "attachment;filename=" + fileName); context.Response.AddHeader("Content-Length", fileInfo.Length.ToString()); context.Response.AddHeader("Content-Transfer-Encoding", "binary"); context.Response.ContentType = "application/octet-stream"; context.Response.ContentEncoding = System.Text.Encoding.GetEncoding("utf-8"); context.Response.WriteFile(fileInfo.FullName); context.Response.Flush(); //fileInfo.Delete(); context.Response.End(); }
/// <summary> /// 为字符串中的非英文字符编码 /// </summary> /// <param name="s"></param> /// <returns></returns> public static string ToHexString(string s) { char[] chars = s.ToCharArray(); StringBuilder builder = new StringBuilder(); for (int index = 0; index < chars.Length; index++) { bool needToEncode = NeedToEncode(chars[index]); if (needToEncode) { string encodedString = ToHexString(chars[index]); builder.Append(encodedString); } else { builder.Append(chars[index]); } }
return builder.ToString(); }
/// <summary> ///指定 一个字符是否应该被编码 /// </summary> /// <param name="chr"></param> /// <returns></returns> private static bool NeedToEncode(char chr) { string reservedChars = "$-_.+!*'(),@=&";
if (chr > 127) return true; if (char.IsLetterOrDigit(chr) || reservedChars.IndexOf(chr) >= 0) return false;
return true; }
/// <summary> /// 为非英文字符串编码 /// </summary> /// <param name="chr"></param> /// <returns></returns> private static string ToHexString(char chr) { UTF8Encoding utf8 = new UTF8Encoding(); byte[] encodedBytes = utf8.GetBytes(chr.ToString()); StringBuilder builder = new StringBuilder(); for (int index = 0; index < encodedBytes.Length; index++) { builder.AppendFormat("%{0}", Convert.ToString(encodedBytes[index], 16)); } return builder.ToString(); }
public bool IsReusable { get { return false; } } } }
相关文章推荐
- asp.net中文件下载时中文名称显示为乱码
- ASP.NET实现下载功能的中文文件名乱码处理
- ASP.NET实现下载的中文文件名乱码处理
- 彻底解决Asp.net 文件下载时文件名的中文乱码和空格异常全球性技术难题
- ASP.NET MVC 实践之路 之十八 利用ASP.NET MVC处理文件上传与下载
- 在ASP.NET中,IE与Firefox下载文件带汉字名时乱码的解决方法
- 解决asp.net中使用FckEditor上传文件,中文名称乱码的问题
- 文件上传 下载 一般处理程序和webForm联系以及asp.net内置对象
- ASP.NET下载文件的中文文件名乱码的解决方法
- Asp.net 下载文件乱码问题一个可能原因--文件名加后缀名
- ASP.NET实现下载功能的中文文件名乱码处理
- 解决用ASP.NET下载文件时,文件名为乱码的问题
- ASP.NET实现下载功能的中文文件名乱码处理
- ASP.NET实现下载功能的中文文件名乱码处理
- 解决Asp.net 实现文件下载时、输出文件时文件名的中文乱码和空格异常
- ASP.NET实现下载功能的中文文件名乱码处理
- ASP.NET实现下载时的中文文件名乱码处理
- Asp.net 文件下载,中文文件名出现乱码
- 彻底解决Asp.net 文件下载时文件名的中文乱码和空格异常全球性技术难题
- Asp.net 文件下载,中文文件名出现乱码