在 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 的文件的主要内容,如果未能解决你的问题,请参考以下文章

如何上传大于 100mb 的 APK? (简化)

Autodesk Forge uploadObject API 无法上传文件 30MB 到 100MB 文件

Flutter APK 大于 100 MB

处理GitHub上的不允许100MB大文件上传

我无法上传大于 8 mb 的文件 [重复]

无法上传大于 1 MB 的文件