通过网页上传大文件

时间:2010-04-09 20:08:46

标签: html http file-upload

让用户从webbrowser向服务器上传大文件的最佳方式是什么?我说200MB +可能高达几gigatyes。我一直在想这个问题的一些可能的解决方案(还没有尝试过),这基本上就是我提出的问题。服务器下载速度不会有问题,但用户可能会连接。

在客户端使用Java或Flash编写的某种applet将部分文件(这可能通过applet)发送到服务器上的php /其他脚本以及校验和+有关该文件的其他信息。在服务器脚本上,所有部件和信息文件都保存在一个临时目录中,该目录具有基于文件的校验和和用户的ip的唯一名称。当发送最后一个块时,applet向服务器发送一个信号,表示它已完成,服务器将文件放在正确的位置。如果块与该部分的校验和不匹配,则服务器将向applet发送响应,告知它重新上载该块。我不知道校验和检查有多重要,因为它是所有tcpackages,有更多insigth migth的人能够回答这个问题。

这可能是最糟糕的方式,更改服务器上的设置以允许通过inputfiel进行大量文件上载。这是正常转移。

使用uploadmanager,它与我上面提到的applet完全相同。

第一个的优点可能是它很可能是相当安全的,你可以显示进度,并且如果ip没有改变则可能恢复上传并且对块进行线程上传。第一个缺点是用户需要flash / java才能工作。第二个优点是它对每个人都有用,但缺点很大,首先没有办法恢复入侵下载,如果出现问题,整个文件将不得不重新上传,这只是其中的一小部分。对于第三个,专业人员几乎与第一个相同,但缺点是用户必须将应用程序下载到他们的计算机并运行,并且应用程序必须与他们的计算机和操作系统兼容。

另一种方式可能是两种方式的组合。让我们说一个applet用于更大或更多的文件和一个简单的输入,相对于较小的文件和可配置性而言可能最大限制为10-20MB。

可能有其他更聪明的方法可以解决这个问题,这就是为什么我在这里寻求建议。

3 个答案:

答案 0 :(得分:2)

最好的办法是使用Java小程序来完成它。我不喜欢说“使用Java”,因为它是一个非常糟糕的解决方案(谁真的喜欢访问页面并看到Java徽标?)。但是,在更高的方面,您可以将文件分成多个块并同时上传。它是跨平台的,一旦它运行,它就会很快。因为它在JVM中运行,所以你也不会像Flash那样对浏览器施加压力。你显然可以很容易地添加进度指标和诸如此类的东西。

最重要的是,我假设因为允许用户发布这样庞大的文件,你会以某种方式确保他们是有效的用户(这样不仅仅是一些白痴上传就像一个1gb的随机文件信件),他们不只是攻击或涂胶你的网站。使用Java,您还可以执行一些轻量级客户端验证,以确保它们是合法用户。并不是说你不能用Flash做到这一点,但在Java中看起来更直观。您还可以加密文件,使用GZip或Deflate压缩它们以帮助节省带宽。

祝你好运

答案 1 :(得分:1)

好吧,我不知道您对服务器有什么访问权限,但是您可以创建一个.htaccess文件,该文件只允许对一个页面/文件进行大量上传。至于分块,我认为你不能用Flash播放器做到这一点。 (无论如何,你无法从客户端访问原始字节。)

答案 2 :(得分:1)

对于有限的用户群,我正在使用的一个想法 - 但尚未实现 - 正在使用Rightload作为客户端上传文件的工具。这是一个非常好的免费(但显然不是开源)用于Windows的“右键单击”FTP上传器,它很容易设置。对于用户的FTP服务器,也可以很容易地为预定义的XML配置文件发送。

据推测,对于大型文件而言,这是一个比基于浏览器的上传更稳定的解决方案。