断点续传的疑问

shihuan10430049 2008-11-27 11:14:45
在IIS中打开一个ASP.NET页面,在页面中有一个超级连接用来打开要下载的文件,也能支持断点续传,但是文件的大小有限制,超过一定大小就报错说“Internet Explorer 无法打开该 Internet 站点,请求的站点不可用或找不到,请以后再试”。如果文件比较小的话就没有这个问题。
我的下载页面如下:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="DownLoad._Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>文件下载</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<a href="fujian/sql.iso">下载sql.iso</a>
</div>
</form>
</body>
</html>
为什么直接打开一个文件也能支持迅雷的断点续传,是什么原因。为什么文件太大就报错。
...全文
128 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
shihuan10430049 2008-11-28
  • 打赏
  • 举报
回复
感谢sp1234的积极帮助,也感谢各位的讨论,结帖了。
zjybushiren88888 2008-11-27
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 sp1234 的回复:]
断点续传的客户端程序会“报错”吗?

有好几个地方会限制单个会话的最长时间,这个最好不要去修改。因此,大文件下载还真的依靠断点续传客户端程序。断点续传客户端,它(即使是单线程地)请求服务器时,服务器会从某个开始地址不断地输出字节,但是客户端程序只需要得到一点点数据(例如32K)就中断了连接,然后另外建立一个新的连接读取从断点以后的数据,如此反复。服务器端可以检测到会话客户端已经中断连接。所以断点续…
[/Quote]
嗯 学习了
robake 2008-11-27
  • 打赏
  • 举报
回复
你这么大个文件,按照iis的工作方式是要消耗很多内存的,你最好使用专门的ftp服务器或者自己编写流读取文件,一次读一部分,传到客户端,用asp.net也可以实现断点续传的。
  • 打赏
  • 举报
回复
断点续传的客户端程序会“报错”吗?

有好几个地方会限制单个会话的最长时间,这个最好不要去修改。因此,大文件下载还真的依靠断点续传客户端程序。断点续传客户端,它(即使是单线程地)请求服务器时,服务器会从某个开始地址不断地输出字节,但是客户端程序只需要得到一点点数据(例如32K)就中断了连接,然后另外建立一个新的连接读取从断点以后的数据,如此反复。服务器端可以检测到会话客户端已经中断连接。所以断点续传是可靠的,即使服务器重新启动了,即使网络终端了改天再重新连上继续续传,也没有问题。
分享大哥 2008-11-27
  • 打赏
  • 举报
回复
文件的大小在iis里面是有设置的;

至于断点续传的机制是建立在iis中的;
  • 打赏
  • 举报
回复
早期的asp.net1.1中,使用Response.WriteFile这个方法下载文件。这个方法是首先把文件读入内存,因此对于几百兆的大文件只要有一个客户端下载会看到内存占用急速上升,直到客户端下载完才下降。但是,在asp.net 2.0中提供了Response.TransmitFile方法来下载文件,已经解决了这个问题。iis并没有这个问题,这纯粹是asp.net的问题。

这个TransmitFile方法并不支持断点续传。因此,如果你需要在asp.net程序中加入编程控制功能,例如在下载前先去判断用户有没有注册、登录、权限够不够下载此文件,就需要自己写一个支持断点续传的download.aspx文件。
  • 打赏
  • 举报
回复
你可以尝试自己写一个asp.net程序用于支持断点续传下载大文件(跟iis没有关系,iis完全可以下载大文件)。这样,你的代码可能就是最终改为这样的形式:

<a href="download.aspx?file=fujian/sql.iso">下载sql.iso </a>

有关这个程序的写法,可以参见这些google结果

但是,如果这是浏览器的问题,或者通讯方面的问题(例如你的路由器的问题),那么就难办了。实际上,还是因为你的客户端下载时没有使用专门支持断点续传的程序造成的,此时服务器端即使支持断点续传对你的那个下载时出错的不支持断点续传的东西也没有用。自己写一个服务器端程序,你只是可能可以跟踪出问题到底发生在哪里。
kfps8kfps8 2008-11-27
  • 打赏
  • 举报
回复
学习。。。
liubin911 2008-11-27
  • 打赏
  • 举报
回复
[Quote=引用楼主 shihuan10430049 的帖子:]
在IIS中打开一个ASP.NET页面,在页面中有一个超级连接用来打开要下载的文件,也能支持断点续传,但是文件的大小有限制,超过一定大小就报错说“Internet Explorer 无法打开该 Internet 站点,请求的站点不可用或找不到,请以后再试”。如果文件比较小的话就没有这个问题。
我的下载页面如下:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="DownLoad._Default" %>

<!DOCTYPE h…
[/Quote]


web.config 里,加
<httpRuntime executionTimeout="90" maxRequestLength="40960" useFullyQualifiedRedirectUrl="false"
minFreeThreads="8" minLocalRequestFreeThreads="4" appRequestQueueLimit="100"/>
maxRequestLength是文件大小

还有可能的原因是
文件名是sql.iso
楼主这个应该是在空间上吧,给空间商打电话,让他们吧下载.iso的权限开了,或者楼主吧这个文件压缩成rar再试试,
<a href="fujian/sql.rar">下载sql.rar</a>
shihuan10430049 2008-11-27
  • 打赏
  • 举报
回复
楼上的看题目了没有?
pgameli 2008-11-27
  • 打赏
  • 举报
回复
配置文件中加入此标签可以解决上传的文件过大的问题
<httpRuntime maxRequestLength="10240" useFullyQualifiedRedirectUrl="true" executionTimeout="6000" minFreeThreads="8" minLocalRequestFreeThreads="4" appRequestQueueLimit="100" />

62,046

社区成员

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

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

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

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