2014-10-06 43 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图书馆和浏览器兼容的客户端库。

相关问题