今天,Sohu邮箱上线了Flash进度条显示和Flash上传附件功能

通过和前端工程师协作,项目进展虽然磕磕碰碰的,但最终总算还是上线了

关于Flash AS相关东西,有以下几点心得(可能不完全对....):

  1. URLLoader类,在AS中使用它来load相应的js文件。请求虽然是在Flash中,但貌似Flash还是借用浏览器来发送相应的Http请求,UA什么的都和浏览器完全一样,Cookie也能相应的带到后端去,这样的请求在HttpWach中是可以监听到
  2. FileReference类,在AS中使用它来完成附件上传。刚开始以为它Post到后台的是二进制流,后来发现,它post过去的数据和普通文件上传是一致的,是multipart/form-data。上传过程是Flash来实现的,在HttpWatch中是监听不到的,但Fiddler是可以看到的,UA是shockwave flash。
  3. 上传时的身份验证:据说FileReference是有Bug的,在IE浏览器中,它能把所有的Cookie带到Server端。但在FireFox,Opera,Safari之类的浏览器,它不能携带相应的cookie,而是带着IE浏览器的持久Cookie(不是Session有效的Cookie)到Server端,这个实现的确很变态,也令人很无语。原本想用js读取Cookie,然后传递给Flash到后台验证,但Passport的Cookie有一个是HttpOnly的,所以很杯具,只好实现一个新的认证机制了.....
  4. 用AS去下载js,实现loading进度,当初做这个是为了能让进度条更平滑,更逼真一些。现在的方案是AS中去下载js,然后回调js函数,利用浏览器的缓存,再动态生成一个javascript标签。这样问题就出现了,如果浏览器禁用了缓存,那么就会重复load相应的js文件2遍,至今还没找到什么好的解决方案....
  5. Flash8.5以上的版本才支持AS3,所以需要严格判断Flash的版本