首页 新闻 会员 周边 捐助

asp.net 文件下载

0
悬赏园豆:10 [已解决问题] 解决于 2010-08-01 23:56

IE6下为什么有的文件能下载,有的文件就下载不了(页面变为空白)。而IE7、IE8则都可以

下载代码如下

代码
1 /// <summary>
2 /// 文件下载
3 /// </summary>
4 /// <param name="curPage">Page页面</param>
5 /// <param name="fileName">客户端显示的文件名</param>
6 /// <param name="filePath">完整的文件路径</param>
7 /// <param name="speed">速度</param>
8 /// <returns>是否下载成功</returns>
9   public static bool DownloadFile(Page curPage, string fileName, string filePath, long speed)
10 {
11 try
12 {
13 HttpResponse response = curPage.Response;
14 HttpRequest request = curPage.Request;
15 FileStream myFile = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
16 BinaryReader br = new BinaryReader(myFile);
17 try
18 {
19 response.AddHeader("Accept-Ranges", "bytes");
20 response.Buffer = false;
21 long fileLength = myFile.Length;
22 long startBytes = 0;
23
24 double pack = 10240; //10K bytes
25 //int sleep = 200; //每秒5次 即5*10K bytes每秒
26 int sleep = (int)Math.Floor(1000 * pack / speed) + 1;
27 if (request.Headers["Range"] != null)
28 {
29 response.StatusCode = 206;
30 string[] range = request.Headers["Range"].Split(new char[] { '=', '-' });
31 startBytes = Convert.ToInt64(range[1]);
32 }
33 response.AddHeader("Content-Length", (fileLength - startBytes).ToString());
34 if (startBytes != 0)
35 {
36 //Response.AddHeader("Content-Range", string.Format(" bytes {0}-{1}/{2}", startBytes, fileLength-1, fileLength));
37 }
38 response.AddHeader("Connection", "Keep-Alive");
39 response.ContentType = "application/octet-stream";
40 response.AddHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8));
41
42 br.BaseStream.Seek(startBytes, SeekOrigin.Begin);
43 int maxCount = (int)Math.Floor((fileLength - startBytes) / pack) + 1;
44
45 for (int i = 0; i < maxCount; i++)
46 {
47 if (response.IsClientConnected)
48 {
49 response.BinaryWrite(br.ReadBytes(int.Parse(pack.ToString())));
50 System.Threading.Thread.Sleep(sleep);
51 }
52 else
53 {
54 i = maxCount;
55 }
56 }
57 }
58 catch
59 {
60 return false;
61 }
62 finally
63 {
64 br.Close();
65
66 myFile.Close();
67 }
68 }
69 catch
70 {
71 return false;
72 }
73 return true;
74 }

 

水无声的主页 水无声 | 初学一级 | 园豆:92
提问于:2010-07-21 17:05
< >
分享
最佳答案
0

不能下载的机器是否安装了一些下载工具,如迅雷等。

收获园豆:10
Astar | 高人七级 |园豆:40805 | 2010-07-21 21:18
不是迅雷的问题吧,有的文件能下载,有的不能
水无声 | 园豆:92 (初学一级) | 2010-07-26 10:43
@水无声:如果是同扩展名有的不能,有的确能。这个就不好说了。
Astar | 园豆:40805 (高人七级) | 2010-07-26 10:44
@Astar: 就是那样的。看下对楼上dudu的回复,你知道是为什么吗?
水无声 | 园豆:92 (初学一级) | 2010-07-26 11:19
@水无声:小于这个“排班表导出格式”这个字数的都不能下载?你这编码都一样的吧。
Astar | 园豆:40805 (高人七级) | 2010-07-26 11:22
@Astar:是不是对于那个字数的不能下载倒没仔细测试过。不过编码肯定都是一样的,都在同一个页面
水无声 | 园豆:92 (初学一级) | 2010-07-26 11:28
@水无声:英文是不是都没问题呢..
Astar | 园豆:40805 (高人七级) | 2010-07-26 11:31
@Astar: 刚刚测试下,英文的基本上都没问题,中文的字数是3、5、7、9的测试的不行。还有啊,只是IE6下有问题,IE8,chrome,ff都没问题
水无声 | 园豆:92 (初学一级) | 2010-07-26 11:42
@水无声:莫非这是IE6的BUG。。。
Astar | 园豆:40805 (高人七级) | 2010-07-26 11:44
这个就不敢断言了。被这个问题搞得很晕,现在的解决方案就是更改为合适文件名了,能下载就可以了。
水无声 | 园豆:92 (初学一级) | 2010-07-26 11:53
其他回答(2)
0

这个我想看你的客户用的是什么样子的IE ,如果>6的话,我想你的这个就不是问题。你可以尝试着,让客户升级他的IE

chenping2008 | 园豆:9836 (大侠五级) | 2010-07-21 19:47
我也讨厌IE6,我自己一直都用chrome,能不能也让客户都用chrome呢?
支持(0) 反对(0) 水无声 | 园豆:92 (初学一级) | 2010-07-26 10:38
0

不能下载的文件的扩展名是什么?

dudu | 园豆:29732 (高人七级) | 2010-07-21 20:39
应该与扩展名无关了。 后来发现跟文件名有关,比如:"排班表导出格式.xls"的文件就出现上述问题,而"排班信息导入格式.xls"就可以正常下载了,这跟字数有关?跟编码有关?实在搞不懂,还望指教下
支持(0) 反对(0) 水无声 | 园豆:92 (初学一级) | 2010-07-26 10:42
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册