首页 > Node.js复制/删除服务器端文件到指定目录文件夹下,并且预判是否存在该目录,如果没有,则递归创建该文件夹目录

Node.js复制/删除服务器端文件到指定目录文件夹下,并且预判是否存在该目录,如果没有,则递归创建该文件夹目录

 

 

注意,前情提示:

本代码基于《Node.js(nodejs)对本地JSON文件进行增、删、改、查操作(轻车熟路)》

传送门Node.js(nodejs)对本地JSON文件进行增、删、改、查操作(轻车熟路)_你挚爱的强哥❤给你发来1条消息❤-CSDN博客

 

在/api/demo/文件夹下面创建copyFileOrFolder.js和deleteFileOrFolder.js

copyFileOrFolder.js代码内容 

const $g = global.SG.$g, fs = global.SG.fs, router = global.SG.router, path = global.SG.path;
module.exports = global.SG.router;const copyFileOrFolerPath = "./json/demo/demo.json";//被复制的文件路径
const pasteFileOrFolerPath = "./json/demoBak/demoBak.json";//粘贴文件路径
// const copyFileOrFolerPath = "./json";//被复制的文件夹路径
// const pasteFileOrFolerPath = "./temp";//粘贴文件夹路径
const copyDir = (src, dst) => {//读取目录中的所有文件/目录fs.readdir(src, (err, paths) => {if (err) throw err;paths.forEach(path => {const _src = src + "/" + path, _dst = dst + "/" + path;let readable, writable;fs.stat(_src, (err, st) => {if (err) throw err;if (st.isFile()) {//是文件readable = fs.createReadStream(_src);//创建读取流writable = fs.createWriteStream(_dst);//创建写入流readable.pipe(writable);//通过管道来传输流} else {//是文件夹copyFolder(_src, _dst);//如果是目录则递归调用自身}});});});
};//复制文件夹
const copyFolder = (src, dst) => fs.existsSync(dst) ? copyDir(src, dst) : fs.mkdir(dst, () => copyDir(src, dst));const mkdirs = $g.dir.mkdirsByFilePath;//递归创建文件夹目录(基于文件路径)const resJson = (req, res) => {fs.copyFile(copyFileOrFolerPath, pasteFileOrFolerPath, err => {$g.json.res(req, res, `复制${copyFileOrFolerPath}${err ? "失败" : "成功"}`, {err, copyFileOrFolerPath, pasteFileOrFolerPath}, true);});
};//复制并且粘贴(覆盖无提示)文件(all方法支持POST、GET、PUT、PATCH、DELETE传参方式)
router.all("/demo/copyFileOrFolder", (req, res) => {if (fs.statSync(copyFileOrFolerPath).isFile()) {//是文件mkdirs(pasteFileOrFolerPath, () => resJson(req, res));//复制文件} else {//是文件夹copyFolder(copyFileOrFolerPath, pasteFileOrFolerPath);//复制文件夹$g.json.res(req, res, `复制${copyFileOrFolerPath}成功`, {err: null, copyFileOrFolerPath, pasteFileOrFolerPath}, true);}
});

 deleteFileOrFolder.js代码内容 

const $g = global.SG.$g, fs = global.SG.fs, router = global.SG.router, path = global.SG.path;
module.exports = global.SG.router;// const deleteFileOrFolderPath = "./json/demoBak/demoBak.json";//被删除文件路径
const deleteFileOrFolderPath = "./json/demoBak";//被删除文件夹路径
const deleteFileOrFolderRecursive = (url, callback) => {//判断给定的路径是否存在fs.exists(url, exists => {if (exists) {if (fs.statSync(url).isFile()) {//是文件fs.unlink(url, err => callback(err));} else {//是文件夹let __del = (url, callback) => {let files = [];//判断给定的路径是否存在files = fs.readdirSync(url);//返回文件和子目录的数组files.forEach((file, index) => {let curPath = path.join(url, file);if (fs.statSync(curPath).isDirectory()) {__del(curPath);//fs.statSync同步读取文件夹文件,如果是文件夹,在重复触发函数} else {fs.unlinkSync(curPath);}});fs.rmdirSync(url);//清除文件夹callback && callback();};__del(url, callback);}} else {callback("亲,您提供的是一个子虚乌有的路径!");}});
};const resJson = (req, res, err) => $g.json.res(req, res, `删除${deleteFileOrFolderPath}${err ? "失败" : "成功"}`, {err, deleteFileOrFolderPath}, !err);//删除文件or文件夹(覆盖无提示)文件(all方法支持POST、GET、PUT、PATCH、DELETE传参方式)
router.all("/demo/deleteFileOrFolder", (req, res) => deleteFileOrFolderRecursive(deleteFileOrFolderPath, err => resJson(req, res, err)));

在index.js最后一行加入

app.use(API_PATH, require(`.${API_PATH}/demo/copyFileOrFolder`));//复制文件or文件夹
app.use(API_PATH, require(`.${API_PATH}/demo/deleteFileOrFolder`));//删除文件or文件夹

运行

node index

更多相关:

  •     注意,前情提示: 本代码基于《Node.js(nodejs)对本地JSON文件进行增、删、改、查操作(轻车熟路)》 传送门Node.js(nodejs)对本地JSON文件进行增、删、改、查操作(轻车熟路)_你挚爱的强哥❤给你发来1条消息❤-CSDN博客   在/api/demo/文件夹下面创建CURD.base.j...

  • 本文来自 运维人生 ,作者:fly是个稻草人链接:http://www.ywadmin.com/?id=76误删除linux系统文件了?不用急,本文将给你一个恢复linux文件的方法,让你轻松应对运维中的各风险问题。方法总比问题多~说在前面的话针对日常维护操作,难免会出现文件误删除的操作。大家熟知linux文件系统不同win有回收...

  • 原文来自SecIN社区—作者:WiHat0x00 什么是WebShell渗透测试工作的一个阶段性目标就是获取目标服务器的操作控制权限,于是WebShell便应运而生。Webshell中的WEB就是web服务,shell就是管理攻击者与操作系统之间的交互。Webshell被称为攻击者通过Web服务器端口对Web服务器有一定的操作权限,而...

  • 断电时文件系统发生了什么?硬盘又发生了什么?下一次开机时写到一半的文件在系统层面还在吗?在底层还在吗?更进一步的, 文件系统如何保证事务性, 会不会存在某种极端情况导致例如最后几个bit还没写完, 文件系统却认为它成功了的情况?回答不限任何文件系统,谢谢!下面是「北极」的回复分享断电的一瞬间,很多事情是无法确定的:1. 你无法确定...

  • 接到项目需求。需要搭建一个页面进行交互,慢慢来b (2).jpg使用python django框架进行页面的搭建在项目文件下打开窗口,输入命令;django-admin startproject helloword#在文件helloword/helloword/创建view.py在view.py文件中输入以代码from django....

  • 常见的错误集合解决方案(一)No.1提示错误'Microsoft.VC90.CRT,version="9.0.21022.8"把Microsoft.NET Framework 3.5.1下面的全部勾选上。No.2解决Qt Designer设计的图标但是VS生成不显示问题描述:在Qt designer中为菜单栏和工具栏设计的图标,但是...

  • 【从零开始的ROS四轴机械臂控制(二)】四、urdf文件及gazebo仿真1.simple_arm示例(1)config文件夹(2)launch文件夹(3)meshes文件夹(4)urdf文件夹(5)worlds文件夹(6)文件间联系2.根据simple_arm示例改进arm0文件夹(1)urdf文件夹①arm1.gazebo.xac...

  •     1、创建一个新的项目文件夹,复制之前的项目文件夹里面除了node_modules文件夹以外的内容到新的项目文件夹   2、然后修改根目录下的package.json文件,把name修改成你的项目名称 3、修改根目录下面的index.html文件的title,改好之后,vue文件的title就改过来了 4、重新n...

  • 连接远程服务器CredSSP加密Oracle修正报错解决办法: 打开注册表,快捷输入 “regedit”(类似找命令提示符 输入 cmd 一样)找文件夹 路径:HKLM(缩写)SoftwareMicrosoftWindowsCurrentVersionPoliciesSystemCredSSPParameters,大...

  • CentOS虚拟机和物理机共享文件夹实现过程。 一、  安装VMware Tools VMwareTools的安装脚本是要使用到perl的,而CentOS 6自身不带perl,所以需要自己安装。可以自己下载源代码编译,也可以直接用yum来安装。 yum install perl   2、虚拟机工具栏-》虚拟机-》安装VMware To...

  • 电脑不知道怎么设置的根目录下看不到所有文件夹 而且打开一个新的文件夹显示 Forbidden You don't have permission to access /atina/ on this server. 最后没办法只能手动把文件夹加上权限 chmod -R 777 atina  //-R 递归修改,“/文件夹/“以下所有内容...