代码改变世界

Asp.Net 上传大文件专题 解决方案终极篇(原项目是“我不是圣人”写的)

2009-07-24 16:23  废墟中的垃圾  阅读(424)  评论(0)    收藏  举报

我不是圣人 的文章 被不断的转载 cnblogs 搜索一下就看到了。但是有一个问题就是没有一个是完整项目下载的。

又或者说都是完整下载,都是 我不是圣人 提供的

但是 作者提供的代码是有问题的 不能直接运行 ,部分人可以运行了 进度条没有效果。

原文的地址是

http://www.cnblogs.com/stg609/archive/2008/07/26/1252231.html

http://www.cnblogs.com/stg609/archive/2008/07/28/1255118.html

http://www.cnblogs.com/stg609/archive/2008/08/03/1258898.html

http://www.cnblogs.com/stg609/archive/2008/08/03/1259206.html

http://www.cnblogs.com/stg609/archive/2008/08/04/1259469.html 需要下载源程序的在这个连接里面有。然后可以按照我说的解决方案去解决问题。

这里基于 我不是圣人的上传代码我写一下 解决方案

1. 程序IDE vs2005 这个需要说明,希望使用2005或者以上的版本进行开发。

2. 很多人下载了代码说不能运行,实际上是因为你没有安装Asp.net Ajax

http://dl.pconline.com.cn/html_2/1/79/id=42065&pn=0&linkPage=1.html 可以在这里进行下载

当然如果不想安装可以找到 “我不是圣人”没有大包到bin下面的 System.Web.Extensions.dll 和 System.Web.Extensions.Design.dll 这样就可以运行了。

3. 很多人说程序可以运行了,进度条也出来了,但是没有滚动效果。

其实很简单,本身程序是没有错误的,但是忽略了一个问题就是 IE 的 ajax 缓存问题。这里有两个方法解决。

第一个方法也是最简单的,就是在 UploadPrograss.aspx.cs 的 Load 方法第一句加入  Response.CacheControl = "no-cache";就可以了

第二个方法是在UploadPrograss.aspx.cs  的js 里面修改一下

原代码是 :script.Append("<script>refresh('UploadProgress.aspx?UploadID=" + ufi.strFileGuid + "&event=start','1000','lStatus','lSpeed','lProgressPic','lProgressNum');</script>");

只要修改一下路径参数

script.Append("<script>refresh('UploadProgress.aspx?UploadID=" + ufi.strFileGuid + "&event=start&random=' + 一个随机数,'1000','lStatus','lSpeed','lProgressPic','lProgressNum');</script>");

第二个方法是实际上是每次给ie一次冗余的参数 这样ie 就不进行页面缓存了,做过ajax项目的兄弟应该对这个比较属性。但是这里比较推荐第一个方法。

4. 程序只能支持IE不能支持其他浏览器,这个问题我这里因为时间的问题不能给出一个完整的解决方案,这里我给大家一个思路,希望有能力的朋友完成

其实这里不能在 其他浏览器显示主要是因为 “我不是圣人” 没有使用标准或者说兼容性的 js 导致的

大家要修改的主要是在 ModalDialog.js 里面

把所有的通过document.all.elementName 这样调用对象的用标准化的方式来调用,如果本身用了jqeury框架,可以使用 $() 来调用就可以支持 其他浏览器了。

 

好了,就写到这里了,应该可以解决你所有的问题了。希望对正在使用这个功能和效果的朋友有一定的帮助。也希望 “我不是圣人” 不要声气 呵呵。