最近一直在看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一秒。上传的文件不提供任何情况下下载的支持。不好意思。空间提供商是不允许我这么做的。呵呵。;-)
如果你不能看到效果,请给我留言,谢谢啦。
浙公网安备 33010602011771号