http下载,通过文件流写到客户端,取消后再点击不再有反映???--真的不想把这个问题留到明年!!!

xinxincao 2003-12-31 03:33:38

为了下面这个问题,我已经开了3个贴,:(

private void Button1_Click(object sender, System.EventArgs e)
{
Stream iStream = null;
string FilePath="f:/clips/Test/Test2.dll";
iStream = new FileStream(FilePath,FileMode.Open,FileAccess.Read,FileShare.Read);
Response.Clear();
Response.ContentType = "application/ms-download";
string FileName="下载速度测试";
Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(FileName,System.Text.Encoding.UTF8));
Response.AddHeader("Content-Length", iStream.Length.ToString());
Response.Flush();
int len=1;
while(len>0)
{
byte[] buffer=new Byte[65532];
len = iStream.Read(buffer,0,65532);
Response.OutputStream.Write(buffer,0,len);
Response.Flush();
}
}

我运行上面那段代码,只有在打了SP1的IE6上运行正常,其他版本的IE,都会出现下面的情况:
在选择文件路径的保存对话框中点取消,或在下载中途点取消后,再去点下载按钮,网页就死在那里。

请问问什么会出现这种情况,怎么解决?

buffer设成多大比较合适,用户反映下载速度太慢(是用来下载电影这样的大文件的),buffer是不是在服务器端开设的,如果设的太大,是不是用户稍稍一多,服务器就撑不住了?

如果我要客户端有300kb/s的下载速度,在服务器端的buffer应该开多大?

...全文
122 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
xinxincao 2004-01-05
  • 打赏
  • 举报
回复
可以了,谢谢,接分
gOODiDEA 2004-01-05
  • 打赏
  • 举报
回复
Try

fs.Close();
--》Response.End();
xinxincao 2004-01-05
  • 打赏
  • 举报
回复
to gOODiDEA(无语)
我运行下面这段代码,解决了之前的问题,但是现在我下载完一个文件后,再去下载会打出一屏的乱码,怎么解决?
string FilePath="f:/clips/DRMTest/dldtest.wmv";
System.IO.FileStream fs = System.IO.File.OpenRead(FilePath);
byte[] FileData = new byte[ fs.Length ];
fs.Read( FileData, 0, ( int ) fs.Length );
Response.Clear();
Response.AddHeader( "Content-Type", "application/ms-download" );
string FileName = "下载速度测试";
Response.AddHeader("Content-Disposition", "inline;filename=" + HttpUtility.UrlEncode(FileName,System.Text.Encoding.UTF8));
Response.AddHeader("Content-Length", fs.Length.ToString() );
Response.BinaryWrite( FileData );
fs.Close();
gOODiDEA 2004-01-01
  • 打赏
  • 举报
回复
参考:

System.IO.FileStream fs = System.IO.File.OpenRead( _FilePath );
byte[] FileData = new byte[ fs.Length ];
fs.Read( FileData, 0, ( int ) fs.Length );
Response.Clear();
Response.AddHeader( "Content-Type", "application/zip" );
string FileName = System.Web.HttpUtility.UrlEncode( System.Text.Encoding.UTF8.GetBytes( _FileName ) );
Response.AddHeader("Content-Disposition", "inline;filename="+ System.Convert.ToChar(34) + FileName + System.Convert.ToChar(34) );
Response.AddHeader("Content-Length", fs.Length.ToString() );
Response.BinaryWrite( FileData );
fs.Close();
System.IO.File.Delete( _FilePath );
huangwangman 2003-12-31
  • 打赏
  • 举报
回复
Dim fInfo As System.IO.FileInfo = New FileInfo(file)
Dim fname As String = fInfo.Name
Response.Buffer = True
Response.Clear()
Response.AddHeader("Content-Disposition", "attachment;filename=" + System.Web.HttpUtility.UrlEncode(System.Text.Encoding.UTF8.GetBytes(fname)))
Response.AddHeader("Content-Length", fInfo.Length.ToString())
Response.ContentType = "application/octet-stream"
Dim MyFileStream As FileStream = New FileStream(file, System.IO.FileMode.Open, System.IO.FileAccess.Read, System.IO.FileShare.Read)
Dim FileSize As Long = MyFileStream.Length
Dim Buffer(CInt(FileSize)) As Byte
MyFileStream.Read(Buffer, 0, Int32.Parse(FileSize))
MyFileStream.Close()
Response.BinaryWrite(Buffer)
xinxincao 2003-12-31
  • 打赏
  • 举报
回复
自己up
牛牛Alex 2003-12-31
  • 打赏
  • 举报
回复
支持你,我也想知道

62,047

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧