electerm / electerm

📻Terminal/ssh/telnet/serialport/RDP/VNC/sftp client(linux, mac, win)
https://electerm.html5beta.com
MIT License
11.22k stars 949 forks source link

trz上传文件后 文件不完整了 #2976

Closed xxoxx closed 1 year ago

xxoxx commented 1 year ago

Electerm Version and download file extension(Electerm版本和下载文件后缀)

electerm-1.32.6-mac-x64.dmg

Platform detail (平台详情)

mac x86

What steps will reproduce the bug?(重新问题的详细步骤)

并不是每个文件都会这样 样本文件: https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-amd64-static.tar.xz
样本文件md5:bef7015ca2fd7f19057cad0262d970d2

通过trz上传后, 文件的md5sum发生改变,造成文件不能正常解压

另外我通过 trzsz-iterm2 的trz上传是正常的 md5值是没有发生改变的, 可排除trzsz这个协议本身的问题

What should have happened?(期望的结果)

正常上传

Would this happen in other terminal app(是否能够在其他同类软件重现这个问题)

No response

Additional information(其他任何相关信息)

No response

xxoxx commented 1 year ago
图片
zxdong262 commented 1 year ago

@lonnywong 可以帮助看看吗

lonnywong commented 1 year ago

@lonnywong 可以帮助看看吗

@zxdong262 你可以复现不?我有空时看看。

lonnywong commented 1 year ago

@xxoxx 看看文件大小分别是什么,差多少?

zxdong262 commented 1 year ago

@xxoxx 看看文件大小分别是什么,差多少?

我试了,任意文件trz上传后都会md5不一样,ls -al查看文件大小都一样 mac->ubuntu server

xxoxx commented 1 year ago

图片 @lonnywong 文件大小都一样, 但是md5值不一样, 可能针对普通文本文档没什么问题, 但是针对压缩包文件, 有一点点差异就不能正常解压

lonnywong commented 1 year ago

@xxoxx 把两个文件放到同一台机,然后 diff 看看。可以用下面的命令之一:

diff -y <(xxd foo1.bin) <(xxd foo2.bin)

vimdiff <(xxd foo1.bin) <(xxd foo2.bin)

https://superuser.com/questions/125376/how-do-i-compare-binary-files-in-linux

zxdong262 commented 1 year ago

@xxoxx 把两个文件放到同一台机,然后 diff 看看。可以用下面的命令之一:

diff -y <(xxd foo1.bin) <(xxd foo2.bin)

vimdiff <(xxd foo1.bin) <(xxd foo2.bin)

https://superuser.com/questions/125376/how-do-i-compare-binary-files-in-linux

Screen Shot 2023-09-13 at 08 19 48

cat test.js 显示为空

xxoxx commented 1 year ago

图片 @lonnywong

xxoxx commented 1 year ago

好像是付了个相同文件大小的空文件上去呢?

lonnywong commented 1 year ago

看来是某种原因导致读文件失败了,然后又没有抛出异常,就继续往下执行了,最终上传到远程的就全是 00。

xxoxx commented 1 year ago

什么时候能修复呢? 现在严重影响了工作效率了

lonnywong commented 1 year ago

@zxdong262

sandboxcontextIsolation 是否可以改成 false? 这样改可能会快一些。

trzsz 的例子中是这样的: https://github.com/trzsz/trzsz.js/blob/9320e1ccc6663bb628821ae871c5897f986680e2/examples/electron/main.js#L18-L22

tabby 是这样的: https://github.com/Eugeny/tabby/blob/3ce2bb68c6ade178cfb48c4027fcd0935712ea0f/app/lib/window.ts#L66-L71

lonnywong commented 1 year ago

image

@zxdong262 返回的长度 45 是符合预期的,但是入参 uint8 这个 buffer 没有被赋值,估计是 ipc 调用时,内容读到另一个 buffer 去了。

lonnywong commented 1 year ago

什么时候能修复呢? 现在严重影响了工作效率了

@xxoxx 可以试着先用旧一些版本的 electerm 。

lonnywong commented 1 year ago

@zxdong262 我有计划把 fs.readSync 换成 fs.read 函数的,其他带 Sync 后缀的也一并换成不带 Sync 后缀的,不过一直没空去写。

https://nodejs.org/api/fs.html#fsreadfd-buffer-offset-length-position-callback

zxdong262 commented 1 year ago

我知道怎么处理了

image

@zxdong262 返回的长度 45 是符合预期的,但是入参 uint8 这个 buffer 没有被赋值,估计是 ipc 调用时,内容读到另一个 buffer 去了。

我知道怎么处理了, ipc 不能对原始数据进行修改,只是把传入参数修改了,得返回才行,得暂时用个临时的修改版trzsz.js来处理,我看看有空我会提交个pr

lonnywong commented 1 year ago

我知道怎么处理了

@zxdong262 现在你是直接将所有参数转发,如果 fs.readSync 用一个函数包起来,那应该可以不改 trzsz.js。其他不受影响的函数,可以保留直接转发。

lonnywong commented 1 year ago

@zxdong262 fs.readSync 的参数是固定的,你把它定义出来,然后就知道怎么实现了。

https://nodejs.org/api/fs.html#fsreadsyncfd-buffer-offset-length-position

readSync(fd, buffer, offset, length, position)
zxdong262 commented 1 year ago

我知道怎么处理了

@zxdong262 现在你是直接将所有参数转发,如果 fs.readSync 用一个函数包起来,那应该可以不改 trzsz.js。其他不受影响的函数,可以保留直接转发。

明白了,感谢指导~

zxdong262 commented 1 year ago

什么时候能修复呢? 现在严重影响了工作效率了

已发布新版,修复了

xxoxx commented 1 year ago

@zxdong262 已经升级了, 经验证,的确可用了,感谢