使用 Flex 同时上传多个文件
Posted
技术标签:
【中文标题】使用 Flex 同时上传多个文件【英文标题】:Uploading multiple files simultaneously with Flex 【发布时间】:2011-01-12 19:41:04 【问题描述】:我一直在开发一个弹性上传器,用户可以在其中选择多个文件。
当文件在队列中上传时(一次一个),它工作正常,但是一旦我尝试让它一次上传 2 个文件,我就会遇到问题。
文件似乎经常被锁定,要么保持在 1%,直到所有其他文件都上传,要么根本不完整。一次上传的文件不会超过一个。
在 Flex 中一次对多个文件调用 .upload 是否存在问题?
【问题讨论】:
检查here,这也是example 【参考方案1】:将上传脚本设置为上传类可能会有所帮助.. 我的意思是,如果您的上传脚本是 php 或 asp 中的,则创建该脚本的类,以便每个请求对应于每个唯一对象,我们可以同时上传文件...
【讨论】:
【参考方案2】:问题在于 Flex 连接到后端的模型。使用 HttpService 和 Remoting,Flex 客户端打开到服务器的 Http 连接。如果您连接到服务器上的相同 Servlet/服务,它将使用相同的连接并且可能会遇到问题。
对于一个简单的测试,尝试创建同一个 servlet 的两个实例并将上传请求发送到 2 个 servlet 以进行 2 次上传。它应该可以工作。
【讨论】:
【参考方案3】:另一种模拟多任务处理的方法是按块下载/上传,并使用 callLater() 进行顺序执行。 这将是早期 Windows 协作式多任务的复制
【讨论】:
【参考方案4】:不幸的是,每个主机的浏览器限制为 2 个(取决于浏览器)活动连接。这意味着一次只有 2 个上传处于活动状态,而另一个将被排队。现在这通常不会成为问题,但是当上传的文件非常大时,其他上传会超时,即使它们没有开始。有一种解决方法,即每 2 次上传(upl1.mydomain.com、upl2.mydomain.com)使用子域,我没有进行测试,但它应该可以解决问题。
参考:http://anirudhs.chaosnet.org/blog/2008.06.17.html 和 http://www.ajaxperformance.com/2006/12/18/circumventing-browser-connection-limits-for-fun-and-profit/(实际上您可以从第一个链接获得)。
此外,您可能无法在 Flash 中对上传进行排队,因为安全模型需要通过鼠标单击来调用(FileReference 的)上传方法。
【讨论】:
哇,非常有趣的文章。我不知道今天的浏览器上仍然存在这样的限制......至于将文件放入队列中,这似乎可以通过循环 FileReferenceList 来正常工作。 更新:我做了一些探索,Firefox 3.0+ 的默认连接限制是 6。因为我一直在使用 Firefox 3.5 进行测试(我再次检查了 about:config 连接限制是 6)我再次不确定问题是什么。 是的,新一代浏览器的最大连接数似乎是 6。我已经把这个数字改成了 8 并且没有设法上传超过 4。在 IE 和 Firefox 上,所以我认为操作系统还有进一步的限制。另外,最初,在 Firefox 上,我只有 2 个上传活动,默认值为 6。可能是一个错误? 在将 IE7 连接限制更新为 12 后,我注意到文件上传确实开始了(所有文件都完成了 0% 以上),但一次没有处理多个文件.我认为这可以追溯到 Flex 如何一次处理多个上传的问题(或者更确切地说......它如何不处理它们......) 好吧,根据您的连接速度以及您的视觉更新发生在与处理相同的线程中这一事实,我猜它可能看起来是这样的。我已经为我正在处理的项目实施了子域解决方法,它对我来说非常有用。【参考方案5】:我没有直接回答您的问题,但我想到了 gmail 上传器。它使用了swfupload(更新为link),它是开源的,所以你可以从源代码中找出来。
answer 中有更多信息。
【讨论】:
以上是关于使用 Flex 同时上传多个文件的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 JavaScript/jQuery 从 ASP.NET Web 窗体的 GridView 内部同时上传多个文件?