判断文件是否下载完成

Dispo 2009-09-27 11:05:19
在用户下载文件的时候,通过浏览器下载的那种,如果用户下载到一半断掉或者取消下载,怎么判断这种情况。

...全文
1221 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
conanhhy 2009-09-27
  • 打赏
  • 举报
回复
关注,挺困难的
yanm7788 2009-09-27
  • 打赏
  • 举报
回复
帮顶个...看起来挺有难度
Dispo 2009-09-27
  • 打赏
  • 举报
回复

System.Net.HttpWebResponse myrp = (System.Net.HttpWebResponse)Myrq.GetResponse();
long totalBytes = myrp.ContentLength;
long totalDownloadedByte = 0;
byte[] byte1 = new byte[1024];
int osize1 = st.Read(byte1, 0, (int)byte1.Length);
while (osize1 > 0 && Response.IsClientConnected)
{
totalDownloadedByte = osize1 + totalDownloadedByte;
Response.OutputStream.Write(byte1, 0, osize1);
//Response.Write(by, 0, osize);
osize1 = st.Read(byte1, 0, (int)byte1.Length);
}

但是这个时候,就算文件下载完了 totalDownloadedByte 和totalBytes 的大小也不一样。。。 不知道怎么获得下载的大小了。。。
zhouyanfss 2009-09-27
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 baiduu 的回复:]
浏览器直接下载应该无法判断是否下载完成。

如果需要判断的话似乎要用流的方式来输出到客户端。

只是一个思路,我具体没有验证过,仅供参考。
[/Quote]
刚开始我也这么想的,似乎不可行,因为客户端关闭浏览器不会给服务器发消息的
B/S是请求返回的模式,没有实时行!
其实这种方式的结果是,客户端关了浏览器,服务器端并不知道,会继续向客户端写(发数据包),只是客户端关了浏览器,没有程序接受处理这些包了而已,所以,不可行!
总体来说,你这个需求估计没法实现!
lesen 2009-09-27
  • 打赏
  • 举报
回复
你的意思是你下载东西完成后? 还是你的文件被下载完成后?

有点混了.
liujintaozyc 2009-09-27
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 lesen 的回复:]
用程序输出流的方式, 知道最后输出完成, 才记录到数据库.
[/Quote]
试试
Dispo 2009-09-27
  • 打赏
  • 举报
回复
我试过流判断了。。。首先是文件的大小每次获得都一样


System.Net.HttpWebResponse myrp = (System.Net.HttpWebResponse)Myrq.GetResponse();
long totalBytes = myrp.ContentLength;


然后就是下载中文件大小不好判断,


long totalDownloadedByte = 0;
byte[] byte1 = new byte[1024];
int osize1 = st.Read(byte1, 0, (int)byte1.Length);
while (osize1 > 0 )
{
totalDownloadedByte = osize1 + totalDownloadedByte;
Response.OutputStream.Write(byte1, 0, osize1);
//Response.Write(by, 0, osize);
osize1 = st.Read(byte1, 0, (int)byte1.Length);
}

不知道下载到一半的时候是怎么处理,没有事件返回
lesen 2009-09-27
  • 打赏
  • 举报
回复
用程序输出流的方式, 知道最后输出完成, 才记录到数据库.
baiduu 2009-09-27
  • 打赏
  • 举报
回复
浏览器直接下载应该无法判断是否下载完成。

如果需要判断的话似乎要用流的方式来输出到客户端。

只是一个思路,我具体没有验证过,仅供参考。
Dispo 2009-09-27
  • 打赏
  • 举报
回复
好像是不能返回的。。。。结贴吧!
devilidea 2009-09-27
  • 打赏
  • 举报
回复
mingxingxia 2009-09-27
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 dispo 的回复:]
C# code
System.Net.HttpWebResponse myrp= (System.Net.HttpWebResponse)Myrq.GetResponse();long totalBytes= myrp.ContentLength;long totalDownloadedByte=0;byte[] byte1=newbyte[1024];int osize1= st.Read(byte1,0, (int)byte1.Length);while (osize1>0&& Response.IsClientConnected)
{
totalDownloadedByte= osize1+ totalDownloadedByte;
Response.OutputStream.Write(byte1,0, osize1);//Response.Write(by, 0, osize); osize1= st.Read(byte1,0, (int)byte1.Length);
}
但是这个时候,就算文件下载完了 totalDownloadedByte 和totalBytes 的大小也不一样。。。 不知道怎么获得下载的大小了。。。
[/Quote]
读到最后一行的时候给你个提示就好了
Dispo 2009-09-27
  • 打赏
  • 举报
回复

System.Net.HttpWebResponse myrp = (System.Net.HttpWebResponse)Myrq.GetResponse();
long totalBytes = myrp.ContentLength;
long totalDownloadedByte = 0;
byte[] byte1 = new byte[1024];
int osize1 = st.Read(byte1, 0, (int)byte1.Length);
while (osize1 > 0 && Response.IsClientConnected)
{
totalDownloadedByte = osize1 + totalDownloadedByte;
Response.OutputStream.Write(byte1, 0, osize1);
//Response.Write(by, 0, osize);
osize1 = st.Read(byte1, 0, (int)byte1.Length);
}

Response.IsClientConnected
加了这句话后,应该可以,只是每次totalDownloadedByte 的都不一样,不知道为什么?
加了这句话的话,断开的话就能判断了。
足球中国 2009-09-27
  • 打赏
  • 举报
回复
cs很容易。
chen_ya_ping 2009-09-27
  • 打赏
  • 举报
回复
这个我想实现不了,现在我们先说下载完不完成是靠服务器来监视,还是靠客户端来监视,要是客户端来监视怎么监视呢,要是服务器端来监视,请问服务器端把数据发送了以后他就不管了。

62,243

社区成员

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

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

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

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