2010-03-15 82 views
35

我有一個Web應用程序,它接受最大4 MB的文件上載。服務器端腳本是PHP,Web服務器是NGINX。許多用戶已經要求大幅增加此限制以允許上傳視頻等。在PHP中使用分塊上傳1GB文件

但是,似乎並沒有簡單的解決方案來解決PHP的這個問題。首先,在客戶端,我正在尋找一些能夠讓我在傳輸過程中傳輸文件的東西。 SWFUpload似乎沒有這樣做。我想我可以使用Java FX流式上傳(http://blogs.oracle.com/rakeshmenonp/entry/javafx_upload_file),但我無法在PHP中找到任何等效的request.getInputStream。

增加瀏覽器client_post限制或php.ini上傳或max_execution時間對於真正的大文件(〜1GB)並不是真正的解決方案,因爲瀏覽器可能會超時並且想到所有存儲在內存中的blob。

有什麼辦法解決這個問題在服務器端使用PHP?我會很感激你的回覆。

+3

我的一個應用程序允許通過配置您提到的相同的服務器端選項來上傳大於1 GB的文件。用戶從未報告過超時或任何此類事件。 – Dolph 2010-03-15 14:37:26

+2

一個很好的解決方案,無處不在,恕我直言。上傳1GB文件不適用於56 KBPS調制解調器/慢速連接。分塊解決方案非常強大,可以支持恢復中斷的鏈接。 – rjha94 2012-07-27 13:30:10

+0

看看這裏:https://tus.io/ – sgargel 2017-09-12 12:15:06

回答

-2

您絕對可以編寫一個Web應用程序來接受一個數據塊(即使通過POST),然後將該數據塊附加到文件中。在我看來,你需要某種客戶端應用程序,它將把一個文件分解成多個塊,然後一次發送給你的Web服務一個塊。但是,創建一個sftp目錄似乎更容易,並且讓客戶只需使用一些預先存在的客戶端應用程序來清理文件即可。

+0

http://code.google.com/p/gigaupload/ – rjha94 2010-07-24 12:00:05

+2

你可能不想僅僅在目標文件進入時追加每個塊。這是可能的大塊的失序。我們使用的解決方案是用數字ID保存每個塊,然後在所有塊全部上傳後合併所有塊。 – 2013-01-23 16:55:11

-3

我認爲在服務器和客戶端之間創建套接字併發送數據塊! ..底層編程似乎是解決..可能不是賭注

3

「但我不能找到PHP request.getInputStream的任何等價物。」

fopen('php://input');吧?

+0

沒有php://多部分表單數據輸入 – rjha94 2010-03-19 11:32:07

0

如何使用Java小程序的上傳和PHP處理..

你可以找到一個例子這裏Jupload: http://sourceforge.net/apps/mediawiki/jupload/index.php?title=PHP_Example

+0

感謝您的鏈接。這應該是可能的,我現在正在嘗試使用Java FX。 JUpload截圖看起來從大約10年前; o) – rjha94 2010-03-19 11:30:24

+0

哈哈不知道男人:)但PHP代碼是相當新近..(前幾天最後更新),你可以看到他們是如何做組塊.. http:///jupload.svn.sourceforge.net/viewvc/jupload/trunk/wwwroot/samples.PHP/jupload.php?view=markup – Chris 2010-03-22 08:43:22

3

我創建了一個JavaFX的客戶端發送的數據塊的大文件最大發布大小(我使用2 MB)和一個PHP接收器腳本將大塊組裝成原始文件。我在這裏發佈apache許可證下的代碼:http://code.google.com/p/gigaupload/ 隨意使用/修改/分發。

+0

如果這是解決你的問題,那麼不要猶豫,並將其標記爲答案;-) – 2010-07-24 12:03:25

10

plupload是一個javascript/php庫,它很容易使用,並允許分塊。

雖然它使用HTML5。

+0

值得一提的是,同時它也支持HTML4,Silverlight和Flash,可以在這裏看到(http://www.plupload.com/example_all_runtimes.php)。 – jdepypere 2014-08-06 17:00:05

2

嘗試使用bigupload腳本。這是非常容易集成,並可以上傳2 GB的大塊。塊大小是可定製的。

+1

鏈接已死亡 – machineaddict 2018-01-23 11:52:34

1

看一下tus protocol這是一個基於HTTP協議的可恢復文件上傳,因此您可以繼續進行停止,而無需重新上傳整個數據,以免發生任何中斷。此協議也從2017年5月起開始adopted by vimeo.

您可以在不同的語言中找到協議的各種實現here。在您的情況下,您可以使用其名爲uppy的javascript客戶端,並在服務器中使用基於服務器的golangphp服務器實現。