最近接到了一个任务,要在nodejs后台读取一个非本地的远程文件,经过一阵研究,找到了方法。发现网上对这件事的文章比较少,就写了一下方法。

1.将一个远程电脑上的文件夹设定为共享文件夹。在win10上的设定方式如图所示:

设定为共享文件夹之后,其他电脑可以根据IP访问该文件夹。现假设设定为共享文件夹的IP为192.168.0.1,文件夹名称为data。

2.在nodejs中使用fs模块读取文件。fs读取文件的异步方式为:

fs.readFile("\\\\192.168.0.1\\data\\data.txt", "utf-8",function (err, data) {if (err) {console.error(err);return;}console.log(data);
})

第一个参数为文件的路径,如果是远程共享文件夹,则IP要写为"\\192.168.0.1\"的格式(注意在字符串中反斜杠\会转义,所以要写成"\\");第二个参数为字符编码格式,缺省值为"utf-8",也可以不填;第三个参数为一个回调函数,该回调函数的2个输入参数为err:读取失败信息,读取成功时err为null。data:读取文件的内容,如果第二个参数为空,则类型为buffer格式,如果第二个参数设定为了某个字符编码格式,则data参数为字符串格式。

同步方式为:

var data = fs.readFileSync("\\\\192.168.0.1\\data\\data.txt", "utf-8");

第一个参数为文件路径,第二个参数为字符编码格式,缺省值为“utf-8”。注意,如果读取文件失败,该函数为崩溃,最好用try...catch...的方式引用。

3.在读取远程文件的时候,经常遇到由于没有输入远程IP的用户名和密码而无法访问的情况。但是nodejs的fs模块中又没有输入用户名和密码的地方,因此我们需要先建立与远程IP的连接。建立与远程IP的连接方式可以在文件浏览器中输入IP,然后在弹出的对话框中输入用户名和密码,也可以在cmd窗口输入指令:

net use \\IP地址 用户密码 /user:用户名

显然我们不太可能能在nodejs运行的时候访问文件浏览器并弹出对话框,输入用户名密码,因此需要使用nodejs调用cmd命令来建立与远程IP的连接。nodejs可以使用 child_process模块来实现,child_process模块有两种方式可以实现调用cmd命令,为exec和spawn。这里推荐使用spawn,因为使用exec有时候没法将cmd的输出字符串进行转码。

NodeJS 子进程提供了与系统交互的重要接口,其主要 API 有:

标准输入、标准输出及标准错误输出的接口;获取标准输入 child.stdin;获取标准输出 child.stdout;获取标准错误输出 child.stderr;获取子进程的PID:child.pid;提供生成子进程的重要方法:child_process.spawn(cmd, args=[], [options]);提供直接执行系统命令的重要方法:child_process.exec(cmd, [options], callback);提供杀死进程的方法:child.kill(signal='SIGTERM')

使用child_process的spawn调用cmd命令的方式为:

var spawn = require("child_process").spawn;
module.exports = function myTest() {return new Promise(function(resolve, reject) {var cmd = "ipconfig";var result = spawn('cmd.exe', ['/s', '/c', `net use \\192.168.0.1 admin001 /user:admin`]);result.on('close', function(code) {console.log('child process exited with code :' + code);});result.stdout.on('data', function(data) {console.log('stdout: ' + data);});result.stderr.on('data', function(data) {console.log('stderr: ' + data);reject(new Error(stderr.toString()));});resolve();});
};

使用该方式之后,就可以建立与192.168.0.1的连接,之后再用fs模块访问文件就不会因为用户名和密码而拒绝访问。这是我找到的读取远程文件的方式,不知道大家有没有更好的方式。

nodejs读取远程共享文件相关推荐

  1. jsp怎么从后台读取远程共享文件夹下的图片在前端显示_Vue后台项目中遇到的技术难点以及解决方案

    作者:yeyan1996 转发链接:https://juejin.im/post/5c76843af265da2ddd4a6dd0 写在前面 金三银四招聘时间已经过去,很多公司开启了今年第二轮招聘的热 ...

  2. java 读取远程文件夹_java读取远程共享文件 | 学步园

    方式一: package example; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; impor ...

  3. 使用JCIFS获取远程共享文件

    package com.jadyer.util;    import java.io.File;  import java.io.FileOutputStream;  import java.io.I ...

  4. JAVA实现环形缓冲多线程读取远程文件

    2019独角兽企业重金招聘Python工程师标准>>> 如果用HttpURLConnection类的方法打开连接,然后用InputStream类获得输入流,再用BufferedInp ...

  5. 【Android 逆向】Android 逆向通用工具开发 ( 网络模块开发 | SOCKET 网络套接字初始化 | 读取远程端 “Android 模拟器“ 信息 | 向远程端写出数据 )

    文章目录 前言 一.SOCKET 网络套接字初始化 二.SOCKET 网络套接 读取远程端 ( Android 模拟器 ) 信息 三.SOCKET 网络套接 向远程端 ( Android 模拟器 ) ...

  6. txt php读取数组,PHP读取远程txt文档到数组并实现遍历

    代码如下 $txt = "http://www.xxx.cn/sitemap.txt"; //读取远程txt; //是否存在 if(file_get_contents($txt)) ...

  7. php输出远程文件边读边下载,php file_get_contents读取远程文件并输出

    php file_get_contents读取远程文件并输出,这样做的好得就是不会在flash播放代码中显示对方网站的文件地址,下面是我自己用的一个.是读取方视频文件用的. require_once( ...

  8. 浏览器拦截跨域请求处理方法(已阻止跨源请求:同源策略禁止读取远程资源)

    原文地址:http://my.oschina.net/lichaoqiang/blog/317823 在浏览器请求中,出现跨域访问资源的问题,我们肯定会遇到.如果跨域请求被阻止,有可能导致css.js ...

  9. php远程读取几行文件,PHP读取远程文件的三种方法

    PHP读取远程文件的三种方法 (2008-08-01 14:29:55) 标签: php 下载远程文件 it HP读取远程文件的几种方法,做采集的第一步就是读取远程文件- 1.file_get_con ...

最新文章

  1. TensorRT-优化-原理
  2. Rocksdb 利用recycle_log_file_num 重用wal-log文件
  3. QThread中的互斥、读写锁、信号量、条件变量
  4. UITableView数据更新问题
  5. 学习Java编程的五步要素
  6. 微信小程序初始化 operateWXData:fail invalid scope
  7. Skywalking-01:Skywalking介绍
  8. App列表之拖拽ListView(上)
  9. ENVI学习总结(十三)——波谱库的浏览与创建
  10. java 程序出现标点错误,我是学java的新手,下面代码出现报错,请问是什么原因?如何解决?...
  11. c语言生成1 100随机数求和,c语言 产生1~100随机数,输入一个数字,和第x个随机数一致的话,计算1~x个随机数的和...
  12. http客户端-性能比较系列-第二篇-多线程
  13. Vista v12.0 Win32-ISO 1DVD(地震数据处理)
  14. 软件开发流程:需求评审流程
  15. fasterrcnn 总结
  16. RAP2环境部署(nginx代理模式)及运维
  17. 再探传说──啤酒与尿布的故事
  18. java计算机毕业设计基于安卓Android的禁毒宣传APP(源码+系统+mysql数据库+Lw文档)
  19. nbiot和2g_浅谈NBIOT
  20. Java中的.obj和.what

热门文章

  1. 深圳市龙华区关于规范产业用房租赁市场稳定租赁价格的实施细则(修订)
  2. 做自媒体视频有哪些变现方式和渠道?
  3. Python初学者-双人对战小游戏
  4. 解决VMware中Ubuntu占用空间过大的问题(Ubuntu虚拟机空间回收)
  5. 七月在线 《图像识别与检测》
  6. 【 在线音乐平台(onlinemusic) 】
  7. 对不起,其实我是.......
  8. Android 图片裁剪 (附源码)
  9. 快速启动nacos脚本
  10. 徐州数字孪生智能工厂3D模型,3d可视化工业建模,数字工厂智能车间建设