请问有没有办法知道客户端下载文件已经下载完毕,用http协议下载

ControlCoder40 2006-10-09 05:50:11
如题
...全文
140 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
xingyaohua 2006-10-10
  • 打赏
  • 举报
回复
up
myminimouse 2006-10-10
  • 打赏
  • 举报
回复
帮顶了
ControlCoder42 2006-10-10
  • 打赏
  • 举报
回复
kbxj406 2006-10-09
  • 打赏
  • 举报
回复
直接在IIS影射目录下,直接由IIS处理下载,你是无法知道什么时候结束的。

对的.

不过通过IIS影射目录提供下载,会存在安全性的问题.如果别人知道下载文件的连接,直接就可以下载了.
ControlCoder40 2006-10-09
  • 打赏
  • 举报
回复
cat_hsfz(我的Blog在http://purl.oclc.org/NET/cathsfz) ( ) 信誉:92
-----------------------------
能详细点吗?
ControlCoder40 2006-10-09
  • 打赏
  • 举报
回复
cat_hsfz 2006-10-09
  • 打赏
  • 举报
回复
在ASP.NET中手动向Response写文件的方式提供下载是可以知道什么时候Request结束,那时候就是下载完了。但如果文件是直接在IIS影射目录下,直接由IIS处理下载,你是无法知道什么时候结束的。
kbxj406 2006-10-09
  • 打赏
  • 举报
回复
如果是用流来发送的话,可以在发送一个流字段前,先判断一下,是否已经发送完成?

我用流发送的一个函数参考:
void SendFile(string filename, string shortfilename)
{
System.IO.FileStream fileStream=new System.IO.FileStream(filename,
System.IO.FileMode.Open, System.IO.FileAccess.Read, System.IO.FileShare.Read);
long fileSize = fileStream.Length;
Context.Response.AddHeader("Content-Length",fileSize.ToString());
Context.Response.ContentType="application/octet-stream";
Context.Response.AddHeader("Accept-Ranges", "bytes");
Context.Response.AddHeader("Content-Disposition","attachment; filename=\"" + HttpUtility.UrlEncode(shortfilename,System.Text.Encoding.UTF8) + "\"");

//每个下载用户占用64KB内存,如果同时有320个用户将占用20MB内存
const int BUFFERSIZE=65536;
byte[] fileBuffer=new byte[BUFFERSIZE];
int count=0;
DateTime start=DateTime.Now;
try
{
while(true)
{
int remain=((int)fileSize-count);
if(remain>=BUFFERSIZE)
{
fileStream.Read(fileBuffer,0,BUFFERSIZE);
Context.Response.BinaryWrite(fileBuffer);
count+=BUFFERSIZE;
// SpeedControl(start, count);
}
else if(remain>0&&remain<BUFFERSIZE)
{//最后一块//此处来判断,并写发送完成后的代码
byte[] lastblock=new byte[remain];
fileStream.Read(lastblock,0,remain);
Context.Response.BinaryWrite(lastblock);
count+=BUFFERSIZE;
break;
}
else
{
if(count==fileSize)
break;
else
throw new Exception("Impossible");
}
}
}
catch(Exception exp)
{
throw exp;
}
finally
{
fileStream.Close();
Context.Response.End();
}
}

62,046

社区成员

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

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

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

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