c# + Flash上传控件

来源:互联网 发布:guitar rig5 mac 破解 编辑:程序博客网 时间:2024/05/01 01:58

先看看控件的外观

上传控件

一、不好解决的问题

 

整体来说,控件本身没什么大问题,只是有点小小的问题先交代一下。

1. Firefox的某些老版本对FLASH不兼容,这个不是控件自身能解决的问题。

2. 新版Firefox虽然兼容了FLASH,但是对SESSION与COOKIES就找不到了,原因是Friefox使用与FLASH使用了不同的程序池造成。

3. 这个控件不支持异步回调信息,不过,异步回调信息也确实没什么用,本来就不应该是控件去实现。要是想实现,也应该是再次封装才对。

4. onComplete的异常信息不可控,我想让根据异常类型显示不同的错误提示,目前有待研究。

5. 大文件上传的性能如何,没有做全方面的对比,我小测了一下,还是很不错的。

6. 服务器接收文件后,可能会有更多的动作,如视频文件上传后需要自动压缩,编辑,切割等。如何对服务器的工作状态信息交互,有待研究。

 

 

二、控件扩展性

 

源码都有,只要稍微会点FLASH,扩展功能应该没问题。

1. FLASH本身可以与JS交互,想做更炫的效果不是问题。

2. 样式可以随意调整。

3. 因为是异步请求,存储文件的方式可控。

4. 不会与目前项目中的其他上传控件冲突。这点很重要。

5. 虽然多文件上传的模式很多,不过,支持多文件上传绝对是没问题的。

 

三、 解读代码

 

问题一大堆,扩展性也达到基本要求。决定使用的话,就要研究一下代码了。

1. 如何限制上传文件大小?

  目前我使用的方法是通过Web.config管理。限制1G

<system.web><httpRuntime maxRequestLength="1048576" useFullyQualifiedRedirectUrl="false"/></system.web>

如果文件超过1G

上传控件,文件过大

2. 如何显示上传文件类型?

    c#的HttpContext 类 context.Request.Files 可以等到上传文件的集合信息,判断文件类型的方式就很多了。不符合要求的直接抛出异常就好。当然,也可以通过客户端验证,效果更好,就是感觉不大安全。最好就是客户端与服务器端都做验证。保证用户体验,也保证服务器安全。

3. 上传成功后如何回传信息?

    我们知道这个控件有Firefox兼容问题,也不支持信息回调(我想是应该支持的才对,只是没研究明白),可是,有一个解决办法,控件有一个参数completeFunction=UploadComplete(),UploadComplete是你的JS方法。作用就是当文件上传完成后,做一些其它的事情。有了它,很多问题就解决了。

    我目前使用的方案是利用Cache,将用户信息与文件信息暂时存在缓存中解决Firefox对Session的问题。上传成功后有AJAX异步读取信息进行回调解决控件不支持异步回调信息的问题,同时也解决了服务器对文件处理的多个动作状态显示的问题。

4. 上传状态提示信息脱离FLASH,如何交给JS去处理?

 交给JS去处理对用户体验效果会更好一些,需要修改FLASH代码了,把信息显示部分用getURL('javascript:' + completeFunction);这样的方法整理一下就可以。

信息提示交给JS

 

目前我开发中遇到的问题都在上面,大家还有什么问题和意见请留言,我们一起探讨研究。

 

本案例的源码下载链接: http://download.csdn.net/source/2058772