我测试了一下,好像没有问题,一下是我的源程序:
测试环境:
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>
测试环境:
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>
我测试的是10万条以上的数据量,正常文件大小应该在8M左右,但是用我现在的这种方式只能下载5.89M
哦.......!?好象不太好吧!
{
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();
}
Windows 2000 Advance Server
VS.Net
Microsoft .Net Framework + sp2
你这样的操作多吗?
如果不多,就做个文件现纪录,然后再输出。
另,可以使用HTTP的Connectionless的方式,这种方式不用知道大小,而且服务器如果把数据传输完毕(Response.End)之後,就会自动断掉TCP连接,不用写Content-Length的头,这样就可以解决你的问题了。
{
// 在此处放置用户代码以初始化页面
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();
}
谢谢您的回答,但问题依然存在。
昨天我查了一下Excel的帮助,发现Excel工作表的最大限制是65536行X256列(我倒:<,我已经......)。哎!以前没玩过,居然上了这种当,真倒霉。 针对这种大小限制的情况,请大家继续发表解决方法。
我现在的放式只在下载的文件中建了一个工作表,应该如何将超出限制的数据导入到其它的工作表中呢?
不过我的那种方式的确可以下载12M以上的数据。