首页 新闻 会员 周边 捐助

asp.net关于下载等到响应的问题

0
悬赏园豆:30 [已解决问题] 解决于 2012-11-13 10:01

最近在做大文件下载。下载的功能基本能实现,但是当某个文件正在下载的时候,再去点别的下载链接,就需要等待之前的下载结束或取消之后才能有响应,或者要等待比较长的时间才有响应,各位大侠有木有解决的方案

还是小菜的主页 还是小菜 | 初学一级 | 园豆:115
提问于:2012-11-09 10:51
< >
分享
最佳答案
0

再建个专门用于下载的站跟网站分开。

收获园豆:20
向往-SONG | 老鸟四级 |园豆:4853 | 2012-11-09 11:07

有木有更好的方法

还是小菜 | 园豆:115 (初学一级) | 2012-11-09 11:39
其他回答(2)
0

那就不要让用户在下载的时候再去点击别的链接了,或者用户自己尝试了几次,就明白了

收获园豆:5
chenping2008 | 园豆:9836 (大侠五级) | 2012-11-09 10:57

不可能不让点,因为网站就是资源下载类的网站。就是提供各种资源给人下载的。

支持(0) 反对(0) 还是小菜 | 园豆:115 (初学一级) | 2012-11-09 10:59

@还是小菜: 大文件的web方式下载就是很慢的啊

 

难道是服务器配置的不够强悍

支持(0) 反对(0) chenping2008 | 园豆:9836 (大侠五级) | 2012-11-09 11:07

@chenping2008: 用向往song的方法新开一个专门用于下载的站点和网站分开的话倒是可以了,但是有没有更好的方法

支持(0) 反对(0) 还是小菜 | 园豆:115 (初学一级) | 2012-11-09 11:58
0

能不能贴个大概的实现方法?

1、如果不是相同的链接,应该不会这样的。

2、难道下载链接都是需要进行页面提交工作?

收获园豆:5
飞来飞去 | 园豆:2057 (老鸟四级) | 2012-11-09 10:58

try
{

long chunksize = 102400;//100K
byte[] buffer = new byte[chunksize];
HttpContext.Current.Response.Clear();
WebRequest request = WebRequest.Create(filepath);
request.Timeout = 60000;
WebResponse response = request.GetResponse();
Stream iStream = response.GetResponseStream();

long dataLengthToRead = response.ContentLength;//获取下载的文件总大小

HttpContext.Current.Response.ContentType = "application/octet-stream";
//通知浏览器下载文件而不是打开
HttpContext.Current.Response.AddHeader("Content-Length", dataLengthToRead.ToString());
HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(filename, System.Text.Encoding.UTF8));

while (dataLengthToRead > 0 && HttpContext.Current.Response.IsClientConnected)
{
int lengthRead = iStream.Read(buffer, 0, Convert.ToInt32(chunksize));//读取的大小
HttpContext.Current.Response.OutputStream.Write(buffer, 0, lengthRead);
HttpContext.Current.Response.Flush();
dataLengthToRead = dataLengthToRead - lengthRead;
}
response.Close();
iStream.Close();

HttpContext.Current.Response.Close();
}
catch( Exception ex)
{

}

支持(0) 反对(0) 还是小菜 | 园豆:115 (初学一级) | 2012-11-09 11:02

@还是小菜: 我的意思是整个下载流程,不是某一段的代码,比如:

1、用户点击链接 xx/download/?id=xxx

2、后台执行:获得xxx的地址

3、后台执行:下载

支持(0) 反对(0) 飞来飞去 | 园豆:2057 (老鸟四级) | 2012-11-09 11:12

@飞来飞去: 就你写的那样的流程

支持(0) 反对(0) 还是小菜 | 园豆:115 (初学一级) | 2012-11-09 11:42
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册