【 webshell 文件传输工具 trzsz.js 】发布 v1.1.3


【 webshell 文件传输工具 trzsz.js 】发布 v1.1.3,使用异步的 fs API,提高了接入的可扩展性。


开发指引

  • 添加依赖

    npm install trzsz
    

    或者

    yarn add trzsz
    
  • 在 Node.js 中引用

    import { TrzszFilter } from "trzsz";
    

    或者

    const { TrzszFilter } = require("trzsz");
    
  • 或者在浏览器中引用

    <script src="node_modules/trzsz/lib/trzsz.js"></script>
    
  • 创建 TrzszFilter 对象( 每个登录服务器的连接创建一个相应的 )

    const trzszFilter = new TrzszFilter({
    // 这里设置 trzsz 的属性,详情请参考下文。
    });
    
  • 一般来说,服务器的输出会转发到终端进行显示,创建 TrzszFilter 过滤器,接受服务器的输出,并转发给终端。

    const trzszFilter = new TrzszFilter({
    // 将服务器的输出转发给终端进行显示,当用户在服务器上执行 trz / tsz 命令时,输出则会被接管。
    writeToTerminal: (data) => terminal.write(typeof data === "string" ? data : new Uint8Array(data)),
    });
    
    // 将服务器的输出转发给 TrzszFilter 进行处理,一般会原样转发回上面定义的 writeToTerminal 函数。
    webSocket.addEventListener("message", (ev) => trzszFilter.processServerOutput(ev.data));
    
  • 一般来说,用户的输入会转发到服务器上,创建 TrzszFilter 过滤器,接受用户的输入,并转发给服务器。

    const trzszFilter = new TrzszFilter({
    // 将用户的输入转发到服务器上,当 trz / tsz 上传或下载时,输入则会被忽略,ctrl + c 会停止传输。
    sendToServer: (data) => webSocket.send(data),
    });
    
    // 将用户的输入转发给 TrzszFilter 进行处理,一般会原样转发回上面定义的 sendToServer 函数。
    terminal.onData((data) => trzszFilter.processTerminalInput(data));
    // 将用户的鼠标事件转发给 TrzszFilter 进行处理,一般会原样转发回上面定义的 sendToServer 函数。
    terminal.onBinary((data) => trzszFilter.processBinaryInput(data));
    
  • 需要告知 TrzszFilter 终端的宽度,在显示进度条时会使用到。

    const trzszFilter = new TrzszFilter({
    // 终端的初始宽度
    terminalColumns: terminal.cols,
    });
    
    // 当终端宽度发生变化时,告知 TrzszFilter 最新的宽度。
    terminal.onResize((size) => trzszFilter.setTerminalColumns(size.cols));
    
  • 如果远程服务器是 Windows 命令行,例如 cmd  PowerShell

    const trzszFilter = new TrzszFilter({
    // 声明远程服务器是 Windows 的 cmd / PowerShell 等
    isWindowsShell: true,
    });
    
  • 如果是 Node.js 运行环境,即能正常执行 require('fs'),那么 chooseSendFiles and chooseSaveDirectory 是必须的。如果是浏览器运行环境,则会忽略它们。注意是 async 函数。

    const trzszFilter = new TrzszFilter({
    // 当用户在服务器上执行 trz 命令上传文件时,require('fs') 不报错,则会回调此函数,选择要上传的文件。
    chooseSendFiles: async (directory) => {
    // 如果 `directory` 参数为 `true`,则应该允许用户选择目录和文件( 多选 )。
    // 如果 `directory` 参数为 `false`,则应该只允许用户选择文件( 多选 )。
    // 返回 `undefined` 代表用户取消选择文件,终止上传操作。
    // 正常应该回一个数组,包含文件或目录的绝对路径,如下:
    return ["/path/to/file1", "/path/to/file2", "/path/to/directory3"];
    },
    // 当用户在服务器上执行 tsz 命令下载文件时,require('fs') 不报错,则会回调此函数,选择要保存的路径。
    chooseSaveDirectory: async () => {
    // 返回 `undefined` 代表用户取消选择保存路径,终止下载操作。
    // 正常应该回一个目录的绝对路径,如下:
    return "/path/to/directory";
    },
    });
    
  • 支持拖拽文件和目录上传的功能。

    terminalHtmlElement.addEventListener("dragover", (event) => event.preventDefault());
    terminalHtmlElement.addEventListener("drop", (event) => {
    event.preventDefault();
    trzszFilter
    .uploadFiles(event.dataTransfer.items)
    .then(() => console.log("upload success"))
    .catch((err) => console.log(err));
    });
    
  • 如果你在使用 xterm-addon-attach 插件,只将简单地用 TrzszAddon 替换 AttachAddon 即可。

    import { Terminal } from "xterm";
    import { TrzszAddon } from "trzsz";
    
    const terminal = new Terminal();
    const trzszAddon = new TrzszAddon(webSocket);
    terminal.loadAddon(trzszAddon);
    

开发示例

  • 浏览器 webshell 例子。

  • Electron 终端例子。

  • TrzszAddon xterm 插件例子。

录屏演示

js 版的 trzsz.js,可以在 Chrome 浏览器中使用 trzsz (trz /tsz) 上传和下载文件,如图:

js 版的 trzsz.js,可以集成到 electron 开发的终端中,使用 trzsz (trz /tsz) 上传和下载文件,如图:


相關推薦

2024-01-16

果:用 TypeScript 写了个 trzsz.js 的库,顺便支持在浏览器 webshell 中使用。这个库主要是面向终端或 webshell 开发者的,用来接入并支持 trzsz ( trz / tsz ):https://github.com/trzsz/trzsz.js 2022 年 3 月,Go 版 trzsz 工具 背景1: trzsz 还有

2023-07-03

web 文件传输工具( trzsz.js 组件 )发布 v1.1.1 ,做了一些细节上的优化。  trzsz (trz /tsz) 是一个兼容 tmux 的文件传输工具,和 lrzsz ( rz /sz ) 类似,并且有进度条,支持目录传输,支持拖动上传。 https://github.com/trzsz/trzsz.js

2023-03-27

trzsz.js ( trz / tsz ) 是类似 rz / sz 的文件传输工具,新版本 1.1.0 支持在浏览器中上传和下载目录。 优点介绍 支持 tmux,包括 tmux 普通模式,以及与 iTerm2 集成的 tmux 命令模式。 支持 传输目录,trz -d 命令上传

2023-06-06

院软件所发起的开源之夏2023活动。 重要变更 构建工具从cmake迁移到了xmake,并且移除了cmake构建定义 新增UOS系统支持,提供amd64和loongarch64两种架构的安装包 修复中日韩三门语言的字数统计 修复v1.1.2引入的部分文档无

2023-08-01

发分支向后移植了张佳在OSPP开源之夏7月完成的三个绘图工具相关的改进 重要变更​ 修复:修复了V1.1.3引入的部分插件无法使用的问题 修复:修复了V1.1.3引入的绘图工具无法正常使用的问题 绘图:在绘图模式中,使用Shi

2022-09-21

性能计算机图形学设计的编程语言。 目前 Taichi v1.1.3 发布了,此版本带来大量改进,摘录如下: 模块 添加纹理接口到 C-API ( #5520 )  Bug修复 使用 MacOS 禁用 vkCmdWriteTimestamp ,以在 Vulkan 上启用测试 ( #

2022-07-10

Croc 是一种允许任意两台计算机简单安全地传输文件和文件夹的工具。目前已发布 9.5.5 版本,带来如下变更: 0e93f1e println -> print os.stderr 7e0814a 更新依赖 c6bcb79 删除 zip 压缩并添加 --zip 发送命令 13

2023-09-19

rge file transfer tool。 基于Go语言的高性能 “手机电脑超大文件传输神器”、“局域网共享文件服务器”。 只需一个文件(exe)双击开启。 1. V2主要功能 1.1 功能描述  局域网文件共享服务器  简单的单个可执行文件

2023-09-22

,适配界面和接口 支持域名(domain)自定义配置 大小文件判断逻辑优化 删除非空文件夹逻辑优化 其他兼容性和易用性优化 手机App主界面 App扫码 传输主界面 手机App上传权限 上传建议从“相册

2023-10-27

编译好 Windows、MacOS、Linux、Android 等平台的可执行文件 只需下载到电脑,双击开启即可使用 注意 1:建议不要安装到 “C:\Program Files (x86)” 等系统目录,否则需要右键 “以管理员身份运行” 注意 2:如果要自定义端

2023-04-08

管理 支持选择默认应用,例如用户使用应用程序打开文件或url地址时选择了默认程序,后续将自动打开该应用程序操作文件。 支持对部分预置应用如Launcher、SystemUI、Settings等,系统事先授予权限(如定位、电话联系人等

2023-07-19

速度和使用体验: 1 、如果传输发生中断,或者传完后文件有修改,再使用 trz -y 上传,或者使用 tsz -y xxx 下载, 将会快速跳过前面一致的部分,从不一致的位置开始断点续传。 2 、按下 Ctrl + C 时不再直

2022-12-07

用户还可以对图像添加标题和注释,搜索他们和透过智能文件夹保存搜索。添加插件还可以输出到 Flickr 的相册、Gallery2、谷歌地球的 KML 文件、Simpleviewer、刻录成光盘或创建 Web 画廊。 近日,digiKam 7.9 正式发布,本次更新的部

2023-04-08

用双向认证只需在配置中设置对应的客户端证书和私钥等文件路径,注意这部分配置无论是使用传统的 TCP 模式还是 QUIC 模式都一样有效: 旧配置文件格式: bridge.mqtt.emqx.tls.enable=false bridge.mqtt.emqx.tls.key_password=yourpass bridge.mqtt