2010-08-25 157 views
5

我试图找到一些软件来帮助我上传非常大的文件(> 200mb)。我只想上传一个文件,没有多个选项。如果可能的话,我也想要一个简单的进度条。文件上传大文件PHP/AJAX

我碰到过http://pixeline.be/experiments/jqUploader/,这实际上是我需要的,但它有每个文件100MB的限制,因为它使用闪存。

有谁知道别的东西与此类似,但可以处理更大的文件?

THX

回答

1

另一种流行的解决方案是http://www.swfupload.org/,但我想它可以从100MB极限吃亏。

关于整个大文件大小的问题,从我的研究看来,为了上传大文件,除了增加upload_max_filesize,post_max_size和max_execution时间的值之外,没有别的选择。我只是想知道post_max_size设置为500M会带来什么样的安全隐患?它不是涉及我的带宽问题 - 这可能是由于攻击者可以向服务器发送随机500M POST请求而产生的可能的DoS攻击。我认为这个问题最好的解决方法是将上传发送到不同的服务器。

这里有整个问题的一个很好的讨论:

http://aaronwinborn.com/blogs/aaron/how-handle-large-file-uploads

如果任何Apache黑客那里可以揭示具有的post_max_size一个非常大的值的安全性问题,将是巨大的任何光。

+1

Apache本身并不在乎文件的大小,像31/32位限制(2.1/4.2gig)这样的模数。但是,如果您有一个非常大的邮件限制,可以将连接池中所有可用的子项与长寿命的上传捆绑在一起,并将DOS机器(以及排空磁盘空间)捆绑在一起。由于上传速度更快,并且可以更快地回收连接,因此更小的限制更难。当然,无论如何,你都可以完全用连接企图猛击服务器。 – 2010-08-25 03:57:10

+0

max_execution_time只影响脚本本身的执行时间。因此不影响实际文件上传所花费的时间。您需要显着增加** max_input_time **。它设置允许脚本接收输入的最大时间(以秒为单位)(包括文件上载本身)。默认值是60秒。 – Jakar 2012-07-25 03:01:27

+0

因此,如果您的最大文件大小为500 MB,** max_input_time **应该至少为1500。 **为什么?**因为平均上传速度约为500kbps。或每2秒1 MB。 500(MB)* 2秒= 1000秒。而一些用户可能会有较慢的互联网或者将一些带宽用于其他任务,所以额外500人左右的缓冲区会很好。 http://us2.php.net/manual/en/features.file-upload.common-pitfalls.php – Jakar 2012-07-25 03:04:29

0
+0

Thx for that :)。因为它(和其他类似的工具)简单地使用html文件输入类型来渲染和上传文件..你认为不得不改变php上传限制会产生安全漏洞吗? – 2010-08-25 02:35:20

+0

当然。有人可以很容易地吃掉你的带宽。但是,在开发之前,你考虑安全漏洞是件好事。因此,您可以尽早填补这些漏洞,而不是稍后。 – 2010-08-25 02:41:25

1

我会建议实施一个Java上传器,如JumpLoader,并将其与您当前的系统集成。它有广泛的API,它的JScript接口也很容易访问。你可以像我一样,编写你的服务器端的处理程序,使之能:

  1. 多文件上传
  2. 上传没有文件大小的任何限制 - 我目前正在与PHP的2G限制挣扎fopen()函数,但我希望解决即将
  3. 分区上传 - 文件获取块上传
  4. 传输完整性 - JumpLoader还可以计算和发送的MD5编码,每个分区和整个文件本身,您可以在服务器端验证,看是否包裹抵达好还是不好。

希望它有帮助。