ASP.NET下载时文件名出现乱码

SongKer 发布时间:2014-07-23 分类:.NET 阅读:4352次 添加评论

ASP.NET文件下载时文件中文名会出现乱码。文件下载方法有各种,经常会碰到给文件中文命名二出现乱码的情况,下面介绍文件的几种下载方法,以及乱码时的解决办法。

  //以流方式下载文件

  protected void Button_Click(object sender, EventArgs e)
  {
      string fileName = "客户端保存的文件名.zip";
      string filePath = Server.MapPath("文件在服务器上的相对路径及文件名.zip");
      //以字符流的形式下载文件
      FileStream fs = new FileStream(filePath, FileMode.Open);
      byte[] bytes = new byte[(int)fs.Length];
      fs.Read(bytes, 0, bytes.Length);
      fs.Close();
      Response.ContentType = "application/octet-stream";
      //通知浏览器下载文件而不是打开
      Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8));
      Response.BinaryWrite(bytes);
      Response.Flush();
      Response.End();
  }

  //文件下载时编码解决中文乱码

HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8))

  //WriteFile实现下载

  protected void Button_Click(object sender, EventArgs e)
  {
      string fileName ="客户端保存的文件名.zip";
      string filePath=Server.MapPath("文件在服务器上的相对路径及文件名.zip");
      FileInfo fileInfo = new FileInfo(filePath);
      Response.Clear();
      Response.ClearContent();
      Response.ClearHeaders();
      Response.AddHeader("Content-Disposition", "attachment;filename=" + fileName);
      Response.AddHeader("Content-Length", fileInfo.Length.ToString());
      Response.AddHeader("Content-Transfer-Encoding", "binary");
      Response.ContentType = "application/octet-stream";
      Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312");
      Response.WriteFile(fileInfo.FullName);
      Response.Flush();
      Response.End();
  }

 //WriteFile分块下载

  protected void Button_Click(object sender, EventArgs e)
  {
      string fileName = "客户端保存的文件名.zip";//客户端保存的文件名
      string filePath = Server.MapPath("文件在服务器上的相对路径及文件名.zip");//路径
      System.IO.FileInfo fileInfo = new System.IO.FileInfo(filePath);
      if (fileInfo.Exists == true)
      {
          const long ChunkSize = 102400;//100K 每次读取文件,只读取100K,缓解服务器的压力
          byte[] buffer = new byte[ChunkSize];
          Response.Clear();
          System.IO.FileStream iStream = System.IO.File.OpenRead(filePath);
          long dataLengthToRead = iStream.Length;//获取下载的文件总大小
          Response.ContentType = "application/octet-stream";
          Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(fileName));
          while (dataLengthToRead > 0 && Response.IsClientConnected)  
          {
              int lengthRead = iStream.Read(buffer, 0, Convert.ToInt32(ChunkSize));//读取的大小
              Response.OutputStream.Write(buffer, 0, lengthRead);
              Response.Flush();
              dataLengthToRead = dataLengthToRead - lengthRead;
          }
          Response.Close();
      }
  }

//下载超过400M的大文件时

protected void Button1_Click(object sender, EventArgs e)
{
      Response.ContentType = "application/x-zip-compressed";
      Response.AddHeader("Content-Disposition", "attachment;filename=z.zip");
      string filename = Server.MapPath("DownLoad/aaa.zip");
      Response.TransmitFile(filename);
}


关键字词: ASP.NET文件下载乱码

暂无留言

发表评论:

◎欢迎您的参与讨论。