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

2006年4月12日 | Author: zhangdi | 标签: ,

最近一直在看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” mce_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一秒。上传的文件不提供任何情况下下载的支持。不好意思。空间提供商是不允许我这么做的。呵呵。;-)

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

Sorry, I cannot find the source code for now and I didn’t use AjaxPro for a long time, so I cannot give the source code to you. The comment on this post will be closed. I’m really very sorry for that.

  1. zjsyky
    2006年9月19日19:23

    我正找这个,能上传吧

  2. zjysky
    2006年9月19日19:24

    给我发一分把,连接错误,zjypp@126.com

  3. 2006年9月19日19:43

    因为不用asp.net了,所以原来的连接失效了。
    回头我找找,给你发一份~

  4. jsddj
    2006年12月14日12:40

    找了好久,才找到这儿。也请给我发一份吧。非常谢谢!jsddj@sina.com

  5. Terry.sT
    2007年1月6日11:24

    也发我份喽~
    hdc258@126.com

  6. freeman
    2007年1月22日16:20

    能否也给俺发一份啊,谢谢啊
    0633shj@gmail.com

  7. freeman
    2007年1月22日16:27

    给俺一个

  8. 2007年1月23日18:28

    Sorry, I didn’t use AjaxPro for a long time.
    So I cannot give you the source code to you guys.

本文的评论功能被关闭了.