【 webshell 文件传输组件】优化了拖拽上传,trzsz.js 发布 v1.1.4

【 webshell 文件传输组件】trzsz.js 支持在浏览器中上传和下载文件,发布 v1.1.4,优化了拖拽上传等功能。

GitHub:https://github.com/trzsz/trzsz.js


录屏演示

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

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

开发指引

  • 添加依赖

    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);
    

开发示例

优秀的个人博客,低调大师

微信关注我们

原文链接:https://www.oschina.net/news/264985/trzsz-1-1-4-released

转载内容版权归作者及来源网站所有!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

相关文章

发表评论

资源下载

更多资源
优质分享Android(本站安卓app)

优质分享Android(本站安卓app)

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Mario,低调大师唯一一个Java游戏作品

Mario,低调大师唯一一个Java游戏作品

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Oracle Database,又名Oracle RDBMS

Oracle Database,又名Oracle RDBMS

Oracle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。可以说Oracle数据库系统是目前世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小、微机环境。它是一种高效率、可靠性好的、适应高吞吐量的数据库方案。

Java Development Kit(Java开发工具)

Java Development Kit(Java开发工具)

JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。