视频的上传是个大问题,首先利用flash在一些浏览器下会提示session过期的问题,那是因为每次上传flash自作聪明的新开了一个session。

这里我们要讨论的问题是uploadify上传大文件的时候虽然提示上传成功,但是返回信息确实失败。

uplodify

 

因为使用了spring mvc的上传,并且开启了缓冲区,一般来说不会出现这样的问题,并且实测在300M的时候没有一样,但是上传1G以上存在问题。

推断应该是哪里做了上传限制,但是检查一圈下来并没有任何的限制为什么还会出现如此问题呢?

中午吃饭的时候在生产环境实测,回来时依旧是如此提示。

排查日志,终于有所发现:

当上传完成的时候 spring的上传组件会将缓冲区中的文件保存至硬盘,file.transferTo() 方法。

但是这个方法保存是相当耗时间的(1G以上)当前的IO耗时约8分钟,所以uploadify 在等待响应的时候超时了。提示出错,但是实际上文件已经上传成功。

如果在file.transferTo方法正在执行的国成功你点击确定按钮使页面发生的跳转,后台会终止action从而导致文件在转存中丢失,所以会莫名其妙的找不到文件了。

如此说来稍微等一等还是有新发现的:)。

大家可以优化file.transferTo过程,或者直接修改上传处理方式来解决了。