Nodejs如何实现远程访问共享文件,我写了如下代码:

Nodejs如何实现远程访问共享文件,我写了如下代码:

不知道你的SMB协议是什么东西,访问局域网可以用child_process

var spawn = require(‘child_process’).spawn;

var auth = spawn(‘net’, [‘use’, ‘\\172.16.21.196’, ‘/user:username’, ‘password’]);

auth.stdout.on(‘data’, function(data){ console.log(‘执行!’); });

auth.stderr.on(‘data’, function(data){ console.log(‘错误!’); });

auth.on(‘exit’, function(data){ console.log(‘退出!’); });


7 回复

要在Node.js中实现远程访问共享文件(例如通过SMB协议),可以使用一些专门为此设计的库。这里我们将介绍如何使用 node-smb 库来实现这一功能。node-smb 是一个专门为Node.js设计的SMB客户端库。

首先,你需要安装 node-smb 库。可以通过npm来安装:

npm install node-smb

以下是一个简单的示例代码,展示如何使用 node-smb 来连接到远程SMB共享并读取文件:

const SMB = require('smb2');

// 创建一个新的SMB客户端实例
const client = new SMB({
    share: '\\172.16.21.196\shared_folder', // 远程SMB共享路径
    username: 'username',                  // 用户名
    password: 'password'                   // 密码
});

client.connect()
  .then(() => {
    console.log('Connected to the SMB server.');

    // 读取共享目录中的文件
    return client.readdir('/');
  })
  .then(files => {
    console.log('Files in the shared folder:', files);

    // 读取特定文件的内容
    return client.readFile('/example.txt');
  })
  .then(buffer => {
    console.log('File content:', buffer.toString());
  })
  .catch(err => {
    console.error('Error:', err.message);
  })
  .finally(() => {
    // 断开与SMB服务器的连接
    client.disconnect();
  });

解释

  1. 创建SMB客户端:我们首先创建一个 SMB 客户端实例,并提供必要的参数如共享路径、用户名和密码。

  2. 连接到SMB服务器:使用 .connect() 方法尝试连接到远程SMB服务器。

  3. 读取目录内容:一旦连接成功,我们调用 readdir('/') 方法来列出共享目录中的所有文件。

  4. 读取文件内容:然后,我们使用 readFile('/example.txt') 方法来读取指定文件的内容。

  5. 处理错误:在整个过程中,我们使用 .catch() 来捕获并处理任何可能发生的错误。

  6. 断开连接:最后,我们使用 .disconnect() 方法确保在操作完成后断开与SMB服务器的连接。

这种方式比直接使用 child_process 调用系统命令更加安全和灵活,因为它提供了更高级别的抽象来处理网络文件系统。


我按照你的代码执行了,但是出现如下enter image description here

我执行的代码如下

var spawn = require(‘child_process’).spawn;

var auth = spawn('net ', ['use ', ‘//172.16.21.196/Files’, ‘/user:xindun/zhangdandan’, ‘Luckywillyou123’]);

auth.stdout.on(‘data’, function(data){ console.log(‘执行!’); });

auth.stderr.on(‘data’, function(data){ console.log(‘错误!’); });

auth.on(‘exit’, function(data){ console.log(‘退出!’); });

这个net use不是磁盘映射的功能吗,这样能在我本地打开那个共享文件夹吗

fs 还能读取远程文件?

想知道怎么实现读取磁盘目录文件,创建,删除之类的功能

不知道楼主的问题解决了没 我现在也遇到这个问题

对于使用Node.js远程访问共享文件夹,特别是通过SMB(Server Message Block)协议访问网络中的共享文件夹,可以使用一些专门的库来简化操作。一个常用的库是 smb2。以下是如何使用 smb2 库连接到远程SMB服务器并列出共享目录中的文件的示例。

首先,你需要安装 smb2 库:

npm install smb2

然后你可以使用以下代码来实现远程访问:

const SMB2 = require('smb2');
const smb2 = new SMB2({
    share: '\\\\172.16.21.196\\share',
    username: 'yourUsername',
    password: 'yourPassword'
});

smb2.readdir('/', (err, files) => {
    if (err) {
        console.error(err);
        return;
    }
    console.log(files);
    smb2.disconnect();
});

这段代码会连接到IP为 172.16.21.196 的SMB服务器,并尝试访问名为 share 的共享文件夹。它使用给定的用户名和密码进行身份验证,然后列出该共享下的所有文件和子目录。最后,它会断开与服务器的连接。

这种方法相比直接使用 child_process.spawn 更加安全和易于管理,因为它避免了硬编码敏感信息到命令行参数中,并且提供了更友好的API来处理文件系统操作。

回到顶部