我测试了一下,好像没有问题,一下是我的源程序:
测试环境: 
  Win2K Server
  Office XP
 Visual studio.Net English Version Sp2<%@ Page language="c#"%>
<script language="c#" runat="Server">
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
string strFileName = System.Web.HttpUtility.UrlEncode("测试.xls"); Response.ContentType = "application/vnd.ms-excel";
Response.Charset = "";
Response.AppendHeader("Content-Disposition","attachment;filename="+strFileName);
this.EnableViewState = false;
SetOutputStream();
Response.End();
} private void SetOutputStream()
{

string strLine = "";
char cSplit = '\x9'; System.IO.StreamWriter objWriter = new System.IO.StreamWriter(Response.OutputStream,System.Text.Encoding.Unicode);

/*
SqlDataReader dr = this.getDataReader(); for(int i = 0;i < dr.FieldCount;i++)
{
strLine += dr.GetName(i).ToString() + cSplit;
} objWriter.WriteLine(strLine);

while(dr.Read())
{
strLine = "";
for(int i = 0;i < dr.FieldCount;i++)
{
strLine += dr.GetValue(i).ToString() + cSplit;
}
objWriter.WriteLine(strLine);
}
*/

for(int i=0;i<3;i++)
strLine+="a"+cSplit;
objWriter.WriteLine(strLine);


for(int i=0;i<5;i++)
{
strLine="";
for(int j=0;j<3;j++)
strLine+="中文1"+cSplit;
objWriter.WriteLine(strLine);
}

objWriter.Close();
}

</script>

解决方案 »

  1.   

    TO: congling(congling) 信誉:100 
    我测试的是10万条以上的数据量,正常文件大小应该在8M左右,但是用我现在的这种方式只能下载5.89M
      

  2.   

    TO:yarshray(saga jion) 
    哦.......!?好象不太好吧!
      

  3.   

    你看看能否使用Transfer-Encode的方式,我记得HTTP协议中有一个Transfer-encode的协议头可以允许你一段一段的下载的。
      

  4.   

    应该没有问题吧,我传了一个12M的文件都没有问题了private void Page_Load(object sender, System.EventArgs e)
    {

    String strFileName=Request.MapPath("test.zip");
    FileStream fin=new FileStream(strFileName,FileMode.Open);
    Response.AddHeader("Content-Disposition", "attachment; filename=" + "test.zip");
    Response.AddHeader("Content-Length", fin.Length.ToString());
    Response.AddHeader("Content-Transfer-Encoding","binary");
    Response.ContentType = "application/octet-stream";
    this.EnableViewState = false;

    byte[] buf=new byte[1024];
    while(true)
    {
    int length=fin.Read(buf,0,buf.Length);
    if(length>0)
    Response.OutputStream.Write(buf,0,length);
    if(length<buf.Length)
    break;
    }
    fin.Close();
    Response.End();
    }
      

  5.   

    TO:congling(congling)以你这种方式当然没问题,关键是在所有的数据都被写到Response.Outputstream中之前无法知道将要传送的数据量会有多大!TO:yarshray(saga jion)
    Windows 2000 Advance Server 
    VS.Net 
    Microsoft .Net Framework + sp2
      

  6.   

    to  IceSheet():
    你这样的操作多吗?
    如果不多,就做个文件现纪录,然后再输出。
    另,可以使用HTTP的Connectionless的方式,这种方式不用知道大小,而且服务器如果把数据传输完毕(Response.End)之後,就会自动断掉TCP连接,不用写Content-Length的头,这样就可以解决你的问题了。
      

  7.   

    以下这个程序应该可以减轻你的疑虑了吧! private void Page_Load(object sender, System.EventArgs e)
    {
    // 在此处放置用户代码以初始化页面

    String strBaseName="test.zip";
    String strFileName=Request.MapPath(strBaseName);
    FileStream fin=new FileStream(strFileName,FileMode.Open);
    Response.AddHeader("Content-Disposition", "attachment; filename=" + strBaseName);
    //Response.AddHeader("Content-Length", fin.Length.ToString());
    Response.AddHeader("Connection","Close");
    Response.AddHeader("Content-Transfer-Encoding","binary");
    Response.ContentType = "application/octet-stream";
    this.EnableViewState = false;

    byte[] buf=new byte[1024];
    while(true)
    {
    int length=fin.Read(buf,0,buf.Length);
    if(length>0)
    Response.OutputStream.Write(buf,0,length);
    if(length<buf.Length)
    break;
    }
    fin.Close();
    Response.Flush();
    Response.Close();
    //Response.End();
    }
      

  8.   

    To:congling(congling)
      谢谢您的回答,但问题依然存在。
      昨天我查了一下Excel的帮助,发现Excel工作表的最大限制是65536行X256列(我倒:<,我已经......)。哎!以前没玩过,居然上了这种当,真倒霉。  针对这种大小限制的情况,请大家继续发表解决方法。
      我现在的放式只在下载的文件中建了一个工作表,应该如何将超出限制的数据导入到其它的工作表中呢?
      

  9.   

    OH!原来如此,看来原因正是在这里,如果多的数据使用Access不是更好吗?
    不过我的那种方式的确可以下载12M以上的数据。