【问题标题】:What's the best way to upload massive (20 - 30 gig) files from a client to a server?将大量(20 - 30 gig)文件从客户端上传到服务器的最佳方式是什么?
【发布时间】:2011-01-20 00:51:29
【问题描述】:

这是对问题的第三次修改,我现在删除了原始文本,因为它显然不再相关。

我需要编写一个客户端,允许用户将大量文件上传到服务器。 AJAX 和 Flash 似乎已被淘汰,因为它们坚持在提交文件之前将文件读入内存。我一直在寻找预先构建的小程序,但没有什么看起来完全有希望。

寻求有关如何执行此操作的建议。问题是客户端和服务器端。 PHP 可能不是收集此类文件的最佳服务器端解决方案......就此而言,服务器是否需要 64 位才能处理超过 4gigs 的文件?

在客户端上,我希望它是基于浏览器的,但现在我认为将其编写为平台应用程序可能会更好(尽管这样会更麻烦)。

真的,我对任何事情都持开放态度,只要它相对可靠。

【问题讨论】:

    标签: file-upload


    【解决方案1】:

    已经创建了大量的 Flash 上传器,它们可能已经满足您的需求或帮助您入门,这对 Google 来说很容易。也就是说,对于多 GB 文件上传器,您可能需要考虑设计一个上传器,该上传器显然可以分块上传大文件,并在网络断开时允许恢复......如果我上传 1.9GB 和然后我失去了与 .1GB 剩余上传的连接!此外,在您的 PHP 方面,您只会收到更小的块,这些块可能更容易在内存方面进行管理。一旦收到所有块,您就可以在 PHP 端将所有块组合在一起。

    Flash 客户端和服务器端需要与这种设计进行互操作。 IE。服务器需要了解您的自定义分块协议。您可能需要考虑节省客户端带宽的方法,例如压缩 Flash 客户端然后上传的块,然后在服务器上解压缩这些块。

    您可能需要考虑使用 Flash 本地存储,以便创建强大的“暂停/继续”用户进程。例如,我上传了 1/2 GB 的 2GB 文件,然后我的电源就熄灭了。如果我能回到上传页面,让 Flash 从我离开的地方继续播放,那就太好了。闪存本地存储可能是支持它的方法,http://www.macromedia.com/support/documentation/en/flashplayer/help/help02.html。例如,您可以使用本地存储来跟踪用户正在上传的本地文件路径,以及上次成功上传的块。

    如果要将其部署在安全环境中,您可能需要在 Flash 客户端中支持身份验证...取决于您计划将其部署到的位置。

    不知道这对 Flash 创意是否有帮助,只是想我会插话。

    我不太清楚纯 AJAX 方法是否适用于多 GB 上传场景。

    【讨论】:

    • 只是一个小评论,我们放弃了 flash,因为我们当时(1 年前)测试的上传选项不支持 ISA 代理,因为我们主要使用 Microsoft 网络,我们转移到 Silverlight问题不存在,但较小的互操作。
    • 是通过 Flash 中的 RTMP 协议吗? ISA 服务器应该支持任何协议/端口。如果 Flash 未通过标准 HTTP(s) 进行通信,则可能已在其中进行了防火墙配置更改以允许 Flash 协议。 Silverlight 解决方案是否使用与 Flash 解决方案相同的协议/端口?
    • 谢谢山。我赞成您的回答,但会保留一些替代方案。我绝对不想为此将文件分成几部分。我宁愿只使用Java并将文件作为一件事上传。这个小程序radinks.com/upload 似乎可以做到这一点。我会报告我的发现。
    • 看起来是一个可行的解决方案。它也支持简历,radinks.com/upload/plus/resume.php。如果强制恢复,它将要求您在服务器端支持分块上传......我可能会这样做,因为我讨厌一个 2GB 的文件。但我尊重您对文件上传受众及其带宽吞吐量/稳定性的了解。
    • 是的,嗯...看起来他们要么是假公司,要么是倒闭。他们没有回复我的查询,他们的订单也不起作用(他们的电话号码也没有)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-23
    • 2010-11-04
    • 2018-01-11
    • 1970-01-01
    • 1970-01-01
    • 2018-08-31
    • 1970-01-01
    相关资源
    最近更新 更多