2010-08-25 374 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編碼,每個分區和整個文件本身,您可以在服務器端驗證,看是否包裹抵達好還是不好。

希望它有幫助。