Nodejs 能否读取网络共享的文件?(已解决)

Nodejs 能否读取网络共享的文件?(已解决)

RT: 如果可以,给个例子看看~先谢过

21 回复

加1


Nodejs 能否读取网络共享的文件?(已解决)

问题描述

我有一个需要通过 Node.js 读取网络共享文件的需求。例如,网络共享路径为 \\network-share\folder\file.txt。请问 Node.js 是否能够直接读取这样的网络共享文件?如果可以的话,请提供一个示例代码。

解决方案

Node.js 本身并不直接支持访问网络共享文件,但可以通过一些间接的方法来实现。一种常见的方法是使用命令行工具(如 smbclientmount)来挂载网络共享文件夹,然后通过 Node.js 访问本地挂载点。

以下是一个简单的示例,展示如何使用 smbclient 和 Node.js 来读取网络共享文件:

  1. 安装 smbclient: 首先,确保你的系统已经安装了 smbclient。你可以使用包管理器来安装它。例如,在 Ubuntu 上,你可以运行:

    sudo apt-get install smbclient
    
  2. 创建一个 Node.js 脚本: 创建一个名为 readNetworkFile.js 的脚本,并添加以下代码:

    const { exec } = require('child_process');
    const fs = require('fs');
    
    // 网络共享路径
    const networkPath = '\\\\network-share\\folder\\file.txt';
    
    // 使用 smbclient 读取文件
    exec(`smbclient ${networkPath} -U username -P password --codepage=UTF-8 -c 'get file.txt'`, (error, stdout, stderr) => {
      if (error) {
        console.error(`执行出错: ${error}`);
        return;
      }
      console.log(`stdout: ${stdout}`);
      console.error(`stderr: ${stderr}`);
    
      // 读取本地临时文件
      fs.readFile('file.txt', 'utf8', (err, data) => {
        if (err) {
          console.error(`读取文件出错: ${err}`);
          return;
        }
        console.log(`文件内容: ${data}`);
      });
    });
    
  3. 运行脚本: 在终端中运行脚本:

    node readNetworkFile.js
    

注意事项

  • 请确保你有权限访问网络共享文件。
  • 你需要替换 usernamepassword 为实际的用户名和密码。
  • 这个示例假设你已经知道如何在你的操作系统上挂载网络共享文件夹。如果你的操作系统不支持这种方式,你可能需要寻找其他解决方案。

通过上述方法,你可以使用 Node.js 间接地读取网络共享文件。希望这对你有所帮助!

无所不能的Nodejs,前辈们,请给个例子

还没搞定,继续顶

什么网络共享?能具体说说吗?

[@frosh](/user/frosh) 就是局域网共享其中一台电脑共享的文件夹 比如说 某一台电脑的ip是 192.168.7.132 共享的test/1.jpg 那我就是想 获取到\192.168.7.132\test\1.jpg

用express写个静态资源服务器呗

[@jintaolee](/user/jintaolee) app.use(express.static(‘file:\192.168.7.132’)); 和app.use(express.static(‘http:\192.168.7.132’)); 都读不到,能给个例子么?

var staticfile=[‘public’,‘up’]; for( var i=0;i<staticfile.length;i++){ app.use(express.static(path.join(__dirname, staticfile[i]))); } 我把静态文件存储路径放在public和up两个文件下 ,我在public下有个图片1.png,那么我启动express后本机127.0.0.1:3000/1.png就能读到图片, 我本机ip172.0.2.38,那么我换台机子只要访问172.0.2.38:3000/1.png就能访问到,但是必须把3000端口对外,或者直接关闭防火墙吧

[@jintaolee](/user/jintaolee) 额,我懂你的意思了,原来你讲的是 在目标电脑上搭载一个图片服务器,但是我这里目前还不能确定有这样的条件去 搭载一个服务器。领导就说只是局域网中一台电脑共享文件而已。大家都去读取这个问题,读(上传)完以后就删除掉这个文件。 现在的问题就是Node服务端如何去获取到共享文件夹 然后做删除操作。

[@hc2014](/user/hc2014) 我去,windows不就支持把这个文件设置成共享文件吗

[@jintaolee](/user/jintaolee) 人为各种操作当然没问题,但是程序读不到啊

[@hc2014](/user/hc2014) 你这个文件到底是上传目录还是下载目录啊,我明确告诉你 nodejs是可以操作文件的 也就是你说的对文件删除是可以的

[@jintaolee](/user/jintaolee) 我知道node是可以操作文件的,但是之前都是在同一台电脑上的,你试过去删除局域网上共享文件夹里面的文件么? 我现在就是想做这种事。 再来简单的说说我的需求, 192.168.7.132这个电脑上共享了一个文件夹叫test, 然后我去访问这个共享文件夹 把里面的某个文件,例如 叫a.jpg 上传到服务器,这一步已经做到了。 然后我接下来想做的就是想删除这个a.jpg

[@hc2014](/user/hc2014) 你在上传完a.jpg函数回调函数里删除这个文件不就行了吗

[@jintaolee](/user/jintaolee) 不知道是我描述的有问题,还是你把问题想的太简单了。图片上传以后获取到的图片路径不是原始路径 打个比方来说, 192.168.7.132/test/a.jpg 这个图片上传以后 获取到的图片路径是/public/upload/a.jpg。这个上传的操作 用到了一个connect-multiparty 的模块来完成的。引用这个模块的原因是修改系统默认的上传路径,不然win7系统会报没有权限的错误 而在ubuntu系统上也会报req.files为undefined的错)。我猜想这个模块的底层赢有解决我问题的方案,但是呢?它嵌套太多,我都没找到核心代码在哪,就算找了我也看不懂!

smb协议 有专门的 模块 .去试试吧.

可以直接使用download,npm install download

[@chrome1008](/user/chrome1008) 搞定~用的是smb2这个模块

[@hc2014](/user/hc2014) 有个同样的需求,能说一下nodejs怎么用smb2吗?

Node.js 能否读取网络共享的文件?(已解决)

是的,Node.js 可以读取网络共享的文件,但需要通过一些额外的步骤来实现。通常情况下,你需要将网络共享的文件系统挂载到本地文件系统的一个目录上,然后通过 Node.js 读取该目录下的文件。

假设你的网络共享已经被挂载到本地的 /mnt/network_share 目录下,你可以使用 fs 模块来读取文件。

示例代码

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

// 网络共享文件路径
const networkShareFilePath = '/mnt/network_share/example.txt';

// 读取文件内容
fs.readFile(path.resolve(networkShareFilePath), 'utf-8', (err, data) => {
    if (err) {
        console.error('Error reading file:', err);
        return;
    }
    console.log('File content:', data);
});

解释

  1. 引入模块:首先引入 Node.js 的 fspath 模块。
  2. 指定文件路径:定义一个变量 networkShareFilePath 来存储网络共享文件的路径。在这个例子中,我们假设文件已经挂载到了本地的 /mnt/network_share 目录下。
  3. 读取文件:使用 fs.readFile 方法来异步读取文件内容。该方法接受三个参数:
    • 文件路径。
    • 读取文件时使用的字符编码(这里使用 'utf-8')。
    • 一个回调函数,当文件读取完成或发生错误时调用。如果发生错误,err 参数将包含错误对象;否则,data 参数将包含文件内容。

以上代码展示了如何从网络共享读取文件内容。确保你的网络共享已经正确挂载,并且 Node.js 进程有足够的权限访问该文件。

回到顶部