2014-10-06 64 views
2

我想寫一些HTML/JS代碼,這將有助於將大文件(多GB)上傳到遠程服務器。之前我們一直在使用一個flash上​​傳器,它可以在一個網絡請求中上傳給定的文件。閃存會打開一個網絡連接,將一塊文件讀入內存,然後將該塊寫入網絡連接,然後抓取下一塊,然後寫入網絡等等,直到整個文件上傳。這是通過這種方式完成的,因爲大多數Web瀏覽器會嘗試在嘗試上傳之前將整個文件讀入內存。在處理多GB文件時,這會使客戶端系統崩潰,因爲它使用所有客戶端內存。現在我們遇到了使用閃存的問題,所以需要繼續,我們希望替換它而不需要修改現有的服務器端代碼。如何在單個連接中以Javascript上傳大文件?

幾個谷歌搜索jquery上傳顯示,有很多庫支持「分塊」,但他們「塊」在多個請求。我們不想在多個網絡請求中分塊文件,我們只想讓JS在將文件寫入單個網絡連接時以塊讀取文件。

任何人都知道一個可以開箱即可完成此任務的圖書館嗎?

如果需要,我們不反對修改現有的庫。任何人都有一段類似於我可能能夠改裝成圖書館的波紋僞代碼片段?

connection = fopen(...); 
fputs("123", connection); 
... some unrelated code ... 
fputs("456", connection); 
fclose(connection); 

(原諒我用僞JS代碼使用的C函數...我知道這是不是你的JS做到這一點,我只是展示在低層次的我要如何寫流到關閉之前的網絡連接)

注意:我們是不是要「現代化」或徹底改善這個項目 - 我們是不是要重新做這個項目。我們有一些已經坐在這裏多年的舊代碼,我們希望儘可能少地改變服務器端代碼。我有更重要的項目要實現現代化並提高效率 - 我們只需要工作。請不要勸我impliment「正確」的文件分塊在服務器端 - 這是我的建議,如果我的建議採取那麼任務將被分配到不同的開發商。現在不在我的控制之下,請僅使用客戶端修復程序!

謝謝,對不起任何頭痛!

+0

如果你想要一個單一的連接,嘗試使用網絡套接字和傳輸塊 – juvian 2014-10-06 19:25:08

回答

0

你可以試試binaryjs。我沒有看過內部,但我知道它支持手動設置塊的大小。也許你甚至可以將它設置爲無窮大。

具體來說,你可以嘗試:

var client = new BinaryClient('example.com', { chunkSize: Number.POSITIVE_INFINITY }); 
client.send('data...'); 

注:binaryjs是一個服務器的NodeJS圖書館和瀏覽器兼容的客戶端庫。

相關問題