转:使用AjaxPro实现文件上传进度条

Posted on 2007-03-10 20:40  尚尚  阅读(1471)  评论(3)    收藏  举报

最近一直在看AjaxPro,其实AjaxPro就是以前的Ajax.NET,只不过作者换了名字。并且AjaxPro是支持.Net Framework2.0的。我个人觉得文件上传进度条是一个比较好的做demo的例子。所以用它写了一个,一是自己学习,二是看看用起来是不是顺手且方便。

AjaxPro使用起来与在Java world中很流行的一个Ajax Framework,DWR(Direct Web Remoting)很类似。因为现在开发,经常使用DWR,所以对于AjaxPro上手还是比较容易的。发现在写这个例子的时候,ASP.NET编程却成了我的瓶颈。。。忘得好快啊。。。

其实核心的代码与Ajax相关的c#代码只有几行:

[AjaxPro.AjaxMethod]
public int UploadProgress(string filename) {
    FileUploadManager mgr = FileUploadManager.Instance;
    try {
        return (int)(100 * mgr.GetFileUploadProgress(filename));
    } catch (Exception e) {
        return 0;
    }
}

真正有用的就是这个[AjaxPro.AjaxMethod]自定义Attribute。它标志了,这个方法可以被客户端通过Javascript调用。在浏览器中通过include一个由AjaxPro自动生成的Javascript,就可以得到这个方法的Client端接口了:<script src="ajaxpro/ajaxdemo.Index,ajaxdemo.ashx" type="text/javascript"></script>。其中,"Index"是Asp.NET中定义这个方法的Class的名称,第一个ajaxdemo是namespace名称,第二个ajaxdemo是assembely的名称。

这样,Client段就可以通过ajaxdemo.Index.UploadProgress(filename, callback);来获得和更新进度条了。

当然,由于XMLHttpRequest自身是不支持文件传输的,所以只能使用form+iframe来实现向Server端post数据。将文件post给Server的一个Class,然后通过AjaxPro的接口来向这个Class询问上传进度,这就是这个Demo的主要思路。Very Simple, hehe.

在这里可以看到Demo page,但不要上传大文件。为了使效果明显,我在每上传1024字节后,就让上传线程Sleep一秒。上传的文件不提供任何情况下下载的支持。不好意思。空间提供商是不允许我这么做的。呵呵。;-)

如果你不能看到效果,请给我留言,谢谢啦。

博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3

Power By Cnblogs