Asp.net实现附件下载(乱码解决)

private void Page_Load(object sender, System.EventArgs e)
{
if (Request.QueryString["Recordid"] != null && Request.QueryString["Recordid"].ToString() != "")
{
StarTech.DBUtility.AdoHelper adoHelper = StarTech.DBUtility.AdoHelper.CreateHelper("News_Instance");
System.Data.DataTable resourceDs = adoHelper.ExecuteSqlDataset("Select * From t_news_resource Where Recordid='" + Request.QueryString["Recordid"].ToString() + "'").Tables[0];
if (resourceDs.Rows.Count > 0)
{
string filepath = this.MapPath(resourceDs.Rows[0]["path"].ToString());
byte[] ByteFile = GetFileByte(filepath);
if (ByteFile != null)
{
string FileType = System.IO.Path.GetExtension(filepath);
string FileName = System.IO.Path.GetFileName(filepath);
Response.Clear();
Response.HeaderEncoding = System.Text.Encoding.Default;
Response.AddHeader("Content-Disposition", "attachment; filename=" + FileName);
Response.AddHeader("Content-Length", ByteFile.Length.ToString());
Response.ContentType = CheckType(FileType);
Response.BinaryWrite(ByteFile);
Response.End();
}
else
{
Response.Write("<font color=red>找不到相关附件!【<a href='javascript:window.opener = null;window.close()'>关闭</a>】</font>");
}
}
}
else
{
Response.Write("<font color=red>参数错误或者权限不够 【<a href='javascript:window.close()'>关闭</a>】</font>");
}
}
//获取文件二进制流
private Byte[] GetFileByte(string path)
{
try
{
System.IO.FileStream file = new System.IO.FileStream(path, System.IO.FileMode.Open, System.IO.FileAccess.Read);
Byte[] imgByte = new Byte[file.Length];
file.Read(imgByte, 0, imgByte.Length);
file.Close();
return imgByte;
}
catch (Exception ex)
{
string str = ex.Message;
return null;
}
}
/// <summary>
/// 根据文件的扩展名来获取对应的"输出流的HTTP MIME"类型
/// </summary>
/// <param name="FileType"></param>
/// <returns></returns>
private string CheckType(string FileType)
{
string ContentType;
switch (FileType.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;
}
———————————————————————————————————
浩瀚的天空,会有改变的希望,世界会不会变得更加好,选择在於我们的手上。
标签:
Asp.net
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义