You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Electron/Node.js局域网文件传输方案咨询:跨设备及临时服务器可行性

局域网文件传输方案(Electron/Node.js/终端)

嘿,我来分享几个实际用过的靠谱方案,刚好能解决你问的这两个问题!

1. 简单可靠的局域网文件传输方法

终端层面(零额外依赖)

  • Netcat(nc):几乎所有Linux/macOS系统自带,Windows可以通过Git Bash或单独安装使用,操作超简单:
    • 发送端(文件所在设备):nc -l 1234 < file.txt,意思是监听1234端口并发送file.txt的内容
    • 接收端(目标设备):nc 192.168.0.100 1234 > received_file.txt,替换成发送端的局域网IP即可接收并保存文件
  • Python 内置HTTP服务器:如果系统装了Python,这是最快的临时分享方式:
    • 在文件所在目录执行:python3 -m http.server 3000(Python2用python -m SimpleHTTPServer 3000)
    • 其他设备在浏览器或下载工具里访问 http://192.168.x.x:3000/file.txt 就能直接下载

Node.js 层面(内置模块即可实现)

不用装任何第三方包,用net模块就能实现点对点传输:

  • 服务端(发送文件):
const net = require('net');
const fs = require('fs');

const server = net.createServer(socket => {
  console.log('设备已连接,开始传输文件');
  const fileStream = fs.createReadStream('your-file.pdf');
  fileStream.pipe(socket);
  
  fileStream.on('end', () => {
    socket.end();
    console.log('文件传输完成');
    server.close();
  });
});

server.listen(4567, () => {
  console.log('等待接收设备连接...');
});
  • 客户端(接收文件):
const net = require('net');
const fs = require('fs');

const client = net.connect({ port: 4567, host: '192.168.0.101' }, () => {
  console.log('已连接到发送端');
});

const writeStream = fs.createWriteStream('received-file.pdf');
client.pipe(writeStream);

client.on('end', () => {
  console.log('文件接收完成');
});

Electron 层面

Electron本质是Node.js+Chromium,所以上面的Node.js方案都能直接用,还能结合UI做更友好的交互(比如选择文件、显示传输进度、生成二维码让手机扫码下载)。

2. 内置方法实现跨设备传输与临时服务器

当然有!Node.js的http模块就是专门干这个的,完全可以搭建临时本地服务器,让其他设备通过URL下载文件,步骤如下:

用Node.js内置模块搭建临时文件服务器

const http = require('http');
const fs = require('fs');
const path = require('path');
const os = require('os');

// 获取本机局域网IP(自动适配不同网卡)
function getLocalIP() {
  const interfaces = os.networkInterfaces();
  for (const devName in interfaces) {
    const iface = interfaces[devName];
    for (const alias of iface) {
      if (alias.family === 'IPv4' && alias.address !== '127.0.0.1' && !alias.internal) {
        return alias.address;
      }
    }
  }
  return '127.0.0.1';
}

const localIP = getLocalIP();
const port = 3000;
const targetFile = path.join(__dirname, 'photo.jpg'); // 替换成你要分享的文件路径

const server = http.createServer((req, res) => {
  // 只响应指定的文件请求
  if (req.url === '/download') {
    // 用流传输,避免大文件占用过多内存
    const fileStream = fs.createReadStream(targetFile);
    
    res.writeHead(200, {
      'Content-Type': 'application/octet-stream', // 通用二进制类型,适配所有文件
      'Content-Disposition': `attachment; filename="${path.basename(targetFile)}"` // 触发浏览器下载
    });
    
    fileStream.pipe(res);
    
    fileStream.on('error', () => {
      res.writeHead(404);
      res.end('文件不存在');
    });
  } else {
    res.writeHead(404);
    res.end('无效路径');
  }
});

server.listen(port, () => {
  console.log(`临时服务器已启动!`);
  console.log(`其他设备下载链接:http://${localIP}:${port}/download`);
});

Electron 中集成这个功能

把上面的代码放到Electron的主进程里,或者在渲染进程中开启nodeIntegration: true后直接使用,还可以:

  • 用Electron的dialog模块让用户选择要分享的文件
  • 把生成的URL转换成二维码(可以用qrcode包,轻量好用),手机扫码就能直接下载
  • 增加传输进度条,监听流的data事件计算已传输字节数

注意事项

  • 确保所有设备在同一个局域网内
  • 关闭设备防火墙对对应端口的限制(比如上面的3000端口)
  • 大文件传输建议用流(createReadStream/createWriteStream),避免内存溢出

如果你之前用quick-transfer遇到问题,不妨试试这些原生方案,稳定性和可控性都更强~

内容的提问来源于stack exchange,提问作者Un1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:50:35