【问题标题】:How to Upload Large files in Javascript in a Single Connection?如何在单个连接中上传 Javascript 中的大文件?
【发布时间】:2014-12-01 03:05:21
【问题描述】:

我正在尝试编写一些 HTML/JS 代码,以方便将大文件(多 GB)上传到远程服务器。以前我们一直在使用 Flash 上传器,它在单个网络请求中上传给定的文件。闪存会打开一个网络连接,将一个文件的一个块读入内存,然后将该块写入网络连接,然后抓取下一个块,然后写入网络等等,直到整个文件被上传。这样做是因为大多数 Web 浏览器会在尝试上传之前尝试将整个文件读入内存。在处理多 GB 文件时,这实际上会使客户端系统崩溃,因为它使用了所有客户端内存。现在我们在使用 flash 时遇到了问题,所以它需要去,我们想替换它而不需要修改现有的服务器端代码。

对 jquery 上传器的一些谷歌搜索表明,有很多支持“分块”的库,但它们在多个请求上“分块”。我们不想通过多个网络请求对文件进行分块,我们只希望 JS 在将文件写入单个网络连接时分块读取文件。

有人知道可以开箱即用的库吗?

如果需要,我们不反对修改现有库。任何人都有类似于以下伪代码的 sn-p,我可以将其改装到库中吗?

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

(请原谅我在伪 JS 代码中使用 C 函数……我知道这不是你在 JS 中的做法,我只是在低级别演示我想如何写入网络连接的流程在关闭之前)

注意:我们并不是要“现代化”或广泛改进这个项目——我们不是要重新做这个项目。我们有一些已经存在多年的旧代码,我们希望对服务器端代码进行尽可能少的更改。我有更重要的项目要现代化并提高效率——我们只需要开展这项工作。请不要建议我在服务器端实施“适当的”文件分块——这是我的建议,如果我的建议被采纳,那么该任务将被分配给不同的开发人员。现在不在我的控制范围内,请这是一个仅限客户端的修复程序!

谢谢,让您头疼了!

【问题讨论】:

  • 如果你想要一个连接,尝试使用 web socket 并传输块

标签: javascript jquery ajax networking file-upload


【解决方案1】:

你可以试试binaryjs。我没有研究过内部结构,但我知道它支持手动设置块大小。也许您甚至可以将其设置为 Infinity。

具体可以试试:

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

注意:binaryjs 是一个 NodeJS 服务器库,也是一个与浏览器兼容的客户端库。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-16
    • 1970-01-01
    • 1970-01-01
    • 2010-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多