Adobe最近发布了Flash Player 10. 微软也因为这个的压力, 推出了Silverlight2.
Flash 10对文件上传组件FileReference和FileReferenceList进行了限制, 如果调用browse()方法时, 不是由Flash的用户事件(mouse/keyboard)引起的, 将不允许弹出浏览文件对话框.
根据相关的文章, 该设计是为了防止Dialog的SPAM . (Flash Player 10 FileReference Changes )
不过,这个改动视乎弊大于利. 像 WordPress / Flickr 这些大网站, 都是通过HTML元素的点击, 调用Flash的组件进行上传的.
Flash 10的发布, 直接让这些大网站,以及很多采用类似方法的程序直接失去作用.
可以说, 这个改动, 对开发者的打击非常大. 我没法理解, 到底是Adobe的开发人员脑袋进水了, 还是他们有恃无恐???
我想是因为他们有恃无恐, 他们敢这样做, 也不是没有道理:
Silverlight 2 已经发布了. 可是据我自己接触到的 , 到目前位置, 它仍然没办法替代Flash的某些功能:
1. 无法进行视频/音频聊天. 它能播放网络视频, 可是没办法使用摄像头/麦克风, 更不要说要取代Flash的多媒体功能了.
2. 无法使用HTTP进行大文件上传.
关于第2点 , 其实网上有很多关于如何使用Silverlight进行文件上传的文章.
但是那些类型的文章都只能针对小文件的上传. 并且没办法做到最高性能的同时能提供上传进度.
原因如下:
1. 如果要把文件进行分拆, 必然会造成多次HTTP通信, 增加通信量. 同时也需要服务器边大量地进行改动.
2. Socket的使用非常有限制. 无法使用Socket来自己实现HTTP上传.
3. WebRequest,WebClient 是用MemoryStream来储存将要上传的数据的. 上传文件时受内存的限制.
4. WebRequest,WebClient的INetworkProgress的实现形同虚设.
Flash有很多弊端 , 但是Silverlight想打败Flash , 太漫长了.