在 Flex 中上传大于 100MB 的文件
Posted
技术标签:
【中文标题】在 Flex 中上传大于 100MB 的文件【英文标题】:Upload file larger than 100MB in Flex 【发布时间】:2011-06-18 13:07:58 【问题描述】:我想上传大于 100 MB 的本地文件,然后将其发送到删除 Java 服务器。
我有这些可能的选择:
使用FileReference Flex类,100Mb以上的文件不建议使用,希望应用不要崩溃。
将给定文件切成小块,然后发送。对我来说,这似乎是一个相当苛刻的决定。
问题:是否有一些 Flex 库允许发送大于 100Mb 的文件?
如果答案是否定的,是否有一些 3rd 方库用于相同的东西?
如果没有,是否有一些用于“切片”文件并将它们异步发送到服务器的第三方库?
编辑:如果我将文件分成几部分,它们应该有多大(用于正确的哈希检查)?
【问题讨论】:
我认为推荐不是因为任何与 Flash 相关的限制,而仅仅是因为通过 POST 发送 100MB 可能会在许多服务器上中断(如果它确实中断,让它崩溃更烦人100+ MB 比 20MB..)。 【参考方案1】:HTTP 不是为传输如此大的文件而设计的,因此我建议您研究其他文件传输方法,例如 FTP。
我知道有人尝试使用套接字创建FTP Flex client,但我认为该项目遇到了技术限制,无法完全完成。
如果可能的话,我强烈建议您重新考虑您的业务需求。
【讨论】:
【参考方案2】:如果 flex fileReference 无法打开大于 100mb 的文件,您可以通过 ExternalInterface 使用 html/javascript 打开它们。获得文件后,您可以将其拆分成块并逐位发送到 Flex(可能通过 Base64 编码)或直接从 HTML/JS 上传。虽然我不知道 HTML 是否可以打开大于 100mb 的文件。
【讨论】:
【参考方案3】:首先,File 的 FileReference 不允许您拆分文件,它允许您一次读取所有数据,它不允许流式传输。在没有任何第三方库的情况下上传大于 100mb 的文件效果很好,但是问题发生在服务器端,通常 ASP.NET 或 Tomcat 服务器需要更大的超时才能接受更大的文件。
通常在 ASP.NET 服务器上上传(对于基于 Java 的服务器也是如此),脚本执行时间不考虑上传时间,通常在脚本上传之前超时。如果上传时间超过 10 分钟并且脚本执行超时时间少于 10 分钟,那么无论您选择哪种客户端库,您都将永远无法上传文件。
如果您想将文件分成更小的部分,您可以选择 silverlight,您可以考虑 silverlight 内置的 md5 哈希。
【讨论】:
谢谢。你告诉我我对问题的误解 - 我认为文件会损坏,但这不是问题。在我的测试中,将 1Gb 文件发送到本地网络中的机器,没有问题。这意味着 Flex FileReference 可以处理大小,POST 请求是问题所在。由于我们是服务器端的开发者,我们会尽量为此类请求设置更大的超时时间。以上是关于在 Flex 中上传大于 100MB 的文件的主要内容,如果未能解决你的问题,请参考以下文章