none
ASP.NET用流输出文件,出现问题 RRS feed

  • 问题

  • 用流输出文件时,如果名字短则没问题!!!如果名字过长,就会出现附件名前一半是乱码,后一半是好的.编码设置都没问题..求解.
    2010年7月19日 1:41

答案

  • 你好:

    尝试一下如下代码:

    HttpUtility.UrlEncode(fileName, System.Text.Encoding.Default);

    按理说乱码与字符串长度没有关系。

    2010年7月22日 6:45
    版主

全部回复

  • 你好:

    尝试一下如下代码:

    HttpUtility.UrlEncode(fileName, System.Text.Encoding.Default);

    按理说乱码与字符串长度没有关系。

    2010年7月22日 6:45
    版主
  •  - - ....改成这样,全部是乱码了...
    2010年7月23日 6:45
  •  - - ....改成这样,全部是乱码了...


    你好:

    请贴出你的代码方便大家为你测试!

    2010年7月26日 3:33
    版主
  •  System.IO.FileStream r = new System.IO.FileStream(Server.MapPath("../MeetingFile/" + La.Text), System.IO.FileMode.Open);    //文件下载实例化
                //设置基本信息 
                Response.Buffer = false;
                Response.AddHeader("Connection", "Keep-Alive");
                Response.ContentType = "application/octet-stream";
                Response.AddHeader("Content-Disposition", "attachment;filename=" + System.IO.Path.GetFileName("../MeetingFile/" + La.Text)); // 此处文件名如果是中文在浏览器默认是筹码,应该加HttpUtility.UrlEncode(filename)
                Response.AddHeader("Content-Length", r.Length.ToString());
                while (true)    //如果文件大于缓冲区,通过while循环多次加载文件
                {
                    //开辟缓冲区空间 
                    byte[] buffer = new byte[1024];
                    //读取文件的数据 
                    int leng = r.Read(buffer, 0, 1024);
                    if (leng == 0)             //到文件尾,结束 
                        break;
                    if (leng == 1024)            //读出的文件数据长度等于缓冲区长度,直接将缓冲区数据写入 
                        Response.BinaryWrite(buffer);           //向客户端发送数据流
                    else
                    {
                        //读出文件数据比缓冲区小,重新定义缓冲区大小,只用于读取文件的最后一个数据块 
                        byte[] b = new byte[leng];
                        for (int i = 0; i < leng; i++)
                            b[i] = buffer[i];
                        Response.BinaryWrite(b);
                    }
                }

                r.Close();//关闭下载文件 
                Response.End();//结束文件下载

    2010年7月28日 2:37