无法直接连接远程服务器时,如何通过hopen传输zip文件至远程目录?
解决方案
问题根源在于原代码将所有文件内容当作q对象处理(使用set和save),这会破坏非q文件的原始数据;而read0按行读取文本的方式,不仅会损坏二进制文件(如图片、压缩包),甚至会破坏带特殊换行符的文本文件。正确的做法是按字节读取文件原始内容,再在远程端直接写入二进制数据。
修正后的代码
远程端函数(需先在远程实例中定义)
upload:{[bytes; fileName] // 拼接远程文件完整路径 filePath: `$"/tmp/files/", string[fileName]; // 写入原始二进制数据 binfile[filePath; bytes] };
本地端调用代码
// 遍历所有文件,按字节读取后发送至远程 {h(upload; read1 paths[x]; names[x])} each til count names
核心说明
read1: 本地用read1读取文件,返回原始字节列表(以0x开头的二进制数据),确保所有类型文件(文本、二进制、q文件)的原始内容完整保留。binfile: 远程用binfile函数直接写入字节数据到文件,避免将非q数据当作q对象处理,彻底解决文件损坏问题。- 目录准备: 确保远程端
/tmp/files目录存在且有写入权限,若不存在可在远程q中执行system "mkdir -p /tmp/files"创建。
验证方式
- 文本文件:远程打开后内容与本地完全一致。
- 二进制文件:发送图片后远程可正常显示,发送zip包后远程解压内容完整。
内容的提问来源于stack exchange,提问作者cpd1
相关产品推荐
相关产品推荐

