2010-04-09 113 views
3

什么方法可以让用户将大文件从webbrowser上传到服务器?我说的是200MB +可能达到几个gigatyes。我一直在想这个问题的一些可能的解决方案(还没有尝试过),这基本上是我想出的事情。服务器下载速度不会成为问题,但用户连接可能会发生。通过网页上传大文件

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

这可能是最糟糕的方式,更改服务器上的设置以允许通过输入实现巨大的文件上传。像正常转移一样。

使用一个上传管理器,它和我上面提到的小程序几乎完全相同。

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

另一种方式可能是两者的组合。让我们说一个更大或更多文件的小程序,以及一个简单的输入,这个输入对于较小的文件和可拼接性而言可能最大为10-20MB。

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

+0

你有没有考虑过使用FTP呢? – BalusC 2010-04-10 00:28:16

+0

是的,但它的含义是对用户来说很简单。有没有一种简单的方法来实现浏览器的ftp? – Hultner 2010-04-10 17:59:27

回答

2

最好的办法是使用Java applet来完成它。我讨厌说“使用Java”,因为它是一个非常糟糕的解决方案(谁真的喜欢访问一个页面并看到Java标志?)。不过,最重要的是,您可以将文件分成块并同时上传。它是跨平台的,一旦运行,它可以很快。由于它运行在JVM中,因此您也不会像Flash那样在浏览器上施加压力。你显然可以轻松地添加进度指标,而且很容易。

最重要的是,我假设由于用户被允许发布这样的大文件,你在某种程度上确保它们是有效的用户(这样它不仅仅是一些白痴上传,如1GB的文件随机字母),而且他们不只是攻击或篡改您的网站。使用Java,您还可以执行一些轻客户端验证,以确保它们是合法用户。并不是说你不能用Flash来做到这一点,但是看起来在Java中使用它更直观。您还可以加密文件,使用GZip或Deflate压缩它们以帮助节省带宽。

好运

+0

+1的java rant:D – knittl 2010-04-11 17:05:03

+0

感谢您的回答,我既不热衷于在网站上运行java小程序,但在这种情况下,它似乎是最好的解决方案。很明显,系统只能访问一组封闭的可信用户,并且也会进行某种验证,可能在服务器端和客户端都是如此。同时拥有用户和客户端的原因是,熟练的用户可能可以嗅探数据并创建他们自己的不受限制的客户端。但是,不管你想要网站,它都不会是某种公共上传。 Upvoted和接受。 – Hultner 2010-04-11 22:03:12

1

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

1

对于有限的用户圈,一个想法,我与玩弄 - 但还没有实现 - 使用Rightload作为一种工具,为客户上传文件。这是一个很好的免费(但显然不是开放源代码)“右键单击”用于Windows的FTP上传器,很容易设置。它似乎也很容易为用户的FTP服务器提供预定义的XML配置文件。

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

+0

有趣的解决方案。创建一个自定义的FTP客户端也不应该是不可能的。问题是跨系统兼容性和可访问性。 – Hultner 2010-04-11 22:05:26

+0

您也可以查看.MONO框架(OpenSource .NET),然后从相同的代码为MacOSX和Windows开发应用程序/客户端。这样你就可以使用普通的FTP客户端传输。 – BerggreenDK 2012-06-28 08:54:39