2010-04-09 109 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