[GH-ISSUE #1893] zmodem 上传下载文件建议 #1134

Closed
opened 2026-02-27 00:02:20 +03:00 by kerem · 3 comments
Owner

Originally created by @leffss on GitHub (Nov 17, 2020).
Original GitHub issue: https://github.com/electerm/electerm/issues/1893

上传

目前在浏览器中实现 zmodem 只有 zmodem.js 库可用,这个库自带的上传函数会一次性读取整个文件后再上传,如果文件较大时会占用很大内存并且造成页面 out of memory

所以推荐使用分段传输,不会占用很大内存,参考项目:https://github.com/leffss/devops or https://github.com/leffss/gowebssh

下载

同样的,zmodem.js 自带的下载函数也是把整个文件下载完后再保存,下载大文件也会出现 out of memory

这里推荐使用 https://github.com/jimmywarting/StreamSaver.js 实现下载。

注意

根据实际测试,即使通过上面的方式实现上传和下载也不完美。为什么呢?

原因有 2 点:

  1. 当使用分段上传时,firefox 浏览器兼容很好,基本不会占用内存,经过测试,上传大约 8GB 的文件都没问题,而 chrome 浏览器不知什么原因,虽然没有全部一次性读取占内存,但是内存占用还是会比较多,基本上超过 2GB 的文件就会接近 out of memory 了。
  2. 当使用 StreamSaver.js 下载,由于 firefox 不支持 WritableStream,需要使用第三方库 web-streams-polyfill/ponyfill 弥补,所以兼容性不是很好。并且经过测试发现 chrome 下载时还是会占用较大内存(但是比直接完全下载后再保存占用要小很多),而 firefox 还是会占用很大内存,由于个人技术能力的问题,原因未知。

所以个人认为最优的方案是:

上传大文件时尽量使用 firefox,文件大小限制在 2GB 内(当使用 firefox 时可以放宽限制到更大);下载大文件时尽量使用 chrome,文件大小限制在 2GB 内(当使用 firefox 时最好限制 1GB 内)。

最后提一点,由于 zmodem.js 库的限制,上传和下载速率不可能和 SecureCRT 等类似客户端相比,最快能达到 7-8 MB/S 的样子吧。

Originally created by @leffss on GitHub (Nov 17, 2020). Original GitHub issue: https://github.com/electerm/electerm/issues/1893 ### 上传 目前在浏览器中实现 zmodem 只有 [zmodem.js](https://github.com/FGasper/zmodemjs) 库可用,这个库自带的上传函数会一次性读取整个文件后再上传,如果文件较大时会占用很大内存并且造成页面 `out of memory`。 所以推荐使用分段传输,不会占用很大内存,参考项目:https://github.com/leffss/devops or https://github.com/leffss/gowebssh 。 ### 下载 同样的,zmodem.js 自带的下载函数也是把整个文件下载完后再保存,下载大文件也会出现 `out of memory`。 这里推荐使用 https://github.com/jimmywarting/StreamSaver.js 实现下载。 ### 注意 根据实际测试,即使通过上面的方式实现上传和下载也不完美。为什么呢? 原因有 2 点: 1. 当使用分段上传时,firefox 浏览器兼容很好,基本不会占用内存,经过测试,上传大约 8GB 的文件都没问题,而 chrome 浏览器不知什么原因,虽然没有全部一次性读取占内存,但是内存占用还是会比较多,基本上超过 2GB 的文件就会接近 `out of memory` 了。 2. 当使用 StreamSaver.js 下载,由于 firefox 不支持 WritableStream,需要使用第三方库 web-streams-polyfill/ponyfill 弥补,所以兼容性不是很好。并且经过测试发现 chrome 下载时还是会占用较大内存(但是比直接完全下载后再保存占用要小很多),而 firefox 还是会占用很大内存,由于个人技术能力的问题,原因未知。 **所以个人认为最优的方案是:** 上传大文件时尽量使用 firefox,文件大小限制在 2GB 内(当使用 firefox 时可以放宽限制到更大);下载大文件时尽量使用 chrome,文件大小限制在 2GB 内(当使用 firefox 时最好限制 1GB 内)。 最后提一点,由于 zmodem.js 库的限制,上传和下载速率不可能和 SecureCRT 等类似客户端相比,最快能达到 7-8 MB/S 的样子吧。
kerem closed this issue 2026-02-27 00:02:21 +03:00
Author
Owner

@zxdong262 commented on GitHub (Nov 17, 2020):

@leffss

流式上传下载由于electron可以直接调用nodejs fs, 我试过是可行的,但是上传方法,试了你的gowebssh项目是可以的,但是挪到我这里就还是那个错误,我还没找到什么原因。

<!-- gh-comment-id:728693498 --> @zxdong262 commented on GitHub (Nov 17, 2020): @leffss 流式上传下载由于electron可以直接调用nodejs fs, 我试过是可行的,但是上传方法,试了你的gowebssh项目是可以的,但是挪到我这里就还是那个错误,我还没找到什么原因。
Author
Owner

@lonnywong commented on GitHub (Mar 27, 2022):

@leffss 可以试试 trzsz ( trz / tsz ) ,和 rz / sz 类似,并且支持 tmux。electerm 升级到 1.19 以上,服务端安装 trzsz :https://github.com/trzsz/trzsz

<!-- gh-comment-id:1079946152 --> @lonnywong commented on GitHub (Mar 27, 2022): @leffss 可以试试 trzsz ( trz / tsz ) ,和 rz / sz 类似,并且支持 tmux。electerm 升级到 1.19 以上,服务端安装 trzsz :https://github.com/trzsz/trzsz
Author
Owner

@leffss commented on GitHub (Mar 28, 2022):

@leffss 可以试试 trzsz ( trz / tsz ) ,和 rz / sz 类似,并且支持 tmux。electerm 升级到 1.19 以上,服务端安装 trzsz :https://github.com/trzsz/trzsz

谢谢,不过我集成的zmodem已经够用了,有时间再研究这个吧

<!-- gh-comment-id:1080104506 --> @leffss commented on GitHub (Mar 28, 2022): > @leffss 可以试试 trzsz ( trz / tsz ) ,和 rz / sz 类似,并且支持 tmux。electerm 升级到 1.19 以上,服务端安装 trzsz :https://github.com/trzsz/trzsz 谢谢,不过我集成的zmodem已经够用了,有时间再研究这个吧
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
starred/electerm#1134
No description provided.