广告
返回顶部
首页 > 资讯 > 服务器 >node ftp怎么上传文件夹到服务器
  • 322
分享到

node ftp怎么上传文件夹到服务器

2023-07-05 22:07:26 322人浏览 独家记忆
摘要

今天小编给大家分享一下node ftp怎么上传文件夹到服务器的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。完整代码

今天小编给大家分享一下node ftp怎么上传文件夹到服务器的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

完整代码示例如下:

const ftp = require('ftp');//连接FTPconst path = require('path');const client = new ftp();const fs = require('fs');//本地文件夹路径;const localDirPath = '/test/';//远程地址,打开ftp以后的地址,不需要加入host;const remotePath = '/';const uploadFiles = [];const mkDirPromiseArr = [];const connectionProperties = {    host: '',                       //ftp地址;    user: '',                       //用户名;    passWord: '',                   //密码;    port: 21                        //端口;};client.connect(connectionProperties);client.on('ready', () => {    console.log('ftp client is ready');    start();});async function start() {    const { err: ea, dir } = await cwd(remotePath);//此处应对err做处理    if (ea) {        client.mkdir(remotePath, true, (err) => {            if (err) {                console.log('创建' + remotePath + '文件夹失败');                upload();            } else {                console.log('创建' + remotePath + '成功');                upload();            }        });    } else {        upload();    }    function upload() {        const filesPath = { files: [] };        getDirAllFilePath(localDirPath, filesPath);        remoteMkDir(filesPath, '');        console.log('准备上传...');        setTimeout(() => {            Promise.all(mkDirPromiseArr).then(() => {                console.log('开始上传...');                const tasks = uploadFile();                runPromiseArray(tasks).then(() => {                    client.end();                    console.warn('上传完成~');                });            });        }, 3000);    }}// 获取本地的文件地址和路径;function getDirAllFilePath(paths, parent) {    const files = fs.readdirSync(paths);    files.forEach(item => {        if (item != '.DS_Store') {            const path = `${paths}/${item}`;            if (isDir(path)) {                getDirAllFilePath(path, parent[item] = { files: [] });            } else if (isFile(path)) {                parent.files.push(item);            }        }    })}//创建远程确实的文件夹;async function remoteMkDir(obj, _path) {    for (const key in obj) {        if (key === 'files') {            for (let i = 0, len = obj[key].length; i < len; i++) {                const promise = new Promise(async resolve => {                    let p = '';                    if (_path) {                        p = _path + '/';                    }                    const filePathName = p + obj[key][i];                    uploadFiles.push({ path: filePathName, fileName: obj[key][i] });                    const ph = remotePath + filePathName.substring(0, filePathName.lastIndexOf('/') + 1);                    let { err: ea, dir } = await cwd(ph);//此处应对err做处理                    if (ea) {                        client.mkdir(ph, true, (err) => {                            if (err) {                                console.log('mkdir' + ph + 'err', err);                                resolve(null);                                return;                            }                            console.log('mkdir ' + ph + '  success');                            resolve(null);                        });                    } else {                        resolve(null);                    }                });                mkDirPromiseArr.push(promise);            }        } else {            let p = '';            if (_path) {                p = _path + '/';            }            remoteMkDir(obj[key], p + key);        }    }}//上传文件;function uploadFile() {    const tasks = [];    const resourcesPath = localDirPath;    //目标路径文件夹;    const checkPath = remotePath;    for (let i = 0, len = uploadFiles.length; i < len; i++) {        const task = () => {            return new Promise(async (resolve, reject) => {                const _path = uploadFiles[i].path;                const targetPath = checkPath + _path;                const putPath = resourcesPath + '/' + _path;                const dirpath = path.dirname(targetPath);                const fileName = path.basename(targetPath);                client.cwd(dirpath, (cwdErr, dir) => {                    client.pwd((pwdErr, cwd) => {                        if (pwdErr) {                            resolve(pwdErr)                        } else {                            client.get(fileName, (err, res) => {                                if (res) {                                    console.log(`${targetPath} =====================已经存在了`);                                    resolve(true);                                } else {                                    const rs = fs.createReadStream(putPath);                                    client.put(rs, fileName, (putErr, data) => {                                        if (putErr) {                                            resolve(err);                                        } else {                                            console.log(targetPath + '文件上传成功');                                            resolve(true);                                        }                                    })                                }                            });                        }                    });                })            });        }        tasks.push(task);    }    return tasks;}//执行Promise的队列动作;function runPromiseArray(parray) { //这个方法可以放到G里    let p = Promise.resolve();    for (let promise of parray) {        p = p.then(promise);    }    return p;}//切换目录async function cwd(dirpath) {    return new Promise((resolve, reject) => {        client.cwd(dirpath, (err, dir) => {            resolve({ err: err, dir: dir });        })    });}function isFile(filepath) {  //判断是否是文件 Boolean    let stat = fs.statSync(filepath)    return stat.isFile()}function isDir(filepath) {  //判断是否是文件夹 Boolean    let stat = fs.statSync(filepath);    return stat.isDirectory();}

笔者解读一下:代码中的localDirPath为本地需要读取其中文件,并使用ftp上传的文件夹。

注意:这里的上传是针对文件夹中所有的文件夹与文件进行遍历后的上传,实际应用中,我们可能只需要上传指定的文件,对此,笔者修改后的脚本如下:

const ftp = require('ftp');//连接FTPconst path = require('path');const client = new ftp();const fs = require('fs');//本地文件夹路径;const localDirPath = path.join(__dirname,'/imgtmp/');//待遍历的本地目录//远程ftp服务器文件路径let remotePath = '/yourWEB/images/';const upFileList = ["202304/202304061415075072.png","202304/202304061415075073.png"];//手动设置需要上传的文件const uploadFiles = [];const mkDirPromiseArr = [];client.on('ready',()=>{    console.log('ftp client is ready');});const connconfig = {    host: '',                       //ftp地址;    user: '',                       //用户名;    password: '',                   //密码;    port: 21                        //端口;}client.connect(connconfig);client.on('ready', () => {    console.log('ftp client is ready');    start();}); async function start() {    const { err: ea, dir } = await cwd(remotePath);//此处应对err做处理    if (ea) {        client.mkdir(remotePath, true, (err) => {            if (err) {                console.log('创建' + remotePath + '文件夹失败');                upload();            } else {                console.log('创建' + remotePath + '成功');                upload();            }        });    } else {        upload();    }     function upload() {        console.log("mkDirPromiseArr==>",mkDirPromiseArr);        // const filesPath = { files: [] };        // getDirAllFilePath(localDirPath, filesPath);        const filesPath = { files: upFileList };//直接给定需要上传的文件列表        // console.log("遍历之后的filesPath===>",filesPath);        remoteMkDir(filesPath, '');        console.log('准备上传...');        setTimeout(() => {            Promise.all(mkDirPromiseArr).then(() => {                console.log('开始上传...');                const tasks = uploadFile();                runPromiseArray(tasks).then(() => {                    client.end();                    console.warn('上传完成~');                });            });        }, 1000);    }} // 获取本地的文件地址和路径;function getDirAllFilePath(paths, parent) {    const files = fs.readdirSync(paths);    files.forEach(item => {        if (item != '.DS_Store') {            const path = `${paths}/${item}`;            if (isDir(path)) {                getDirAllFilePath(path, parent[item] = { files: [] });            } else if (isFile(path)) {                parent.files.push(item);            }        }    })}  //创建远程缺失的文件夹;async function remoteMkDir(obj, _path) {    for (const key in obj) {        if (key === 'files') {            for (let i = 0, len = obj[key].length; i < len; i++) {                const promise = new Promise(async resolve => {                    let p = '';                    if (_path) {                        p = _path + '/';                    }                    const filePathName = p + obj[key][i];                    // const filePathName = path.dirname(obj[key][i]);                    const fileName = path.basename(obj[key][i]);                    // uploadFiles.push({ path: filePathName, fileName: obj[key][i] });                    uploadFiles.push({ path: filePathName, fileName: fileName });                    const ph = remotePath + filePathName.substring(0, filePathName.lastIndexOf('/') + 1);                    let { err: ea, dir } = await cwd(ph);//此处应对err做处理                    if (ea) {                        client.mkdir(ph, true, (err) => {                            if (err) {                                console.log('mkdir' + ph + 'err', err);                                resolve(null);                                return;                            }                            console.log('mkdir ' + ph + '  success');                            resolve(null);                        });                    } else {                        resolve(null);                    }                });                 mkDirPromiseArr.push(promise);            }        } else {            let p = '';            if (_path) {                p = _path + '/';            }            remoteMkDir(obj[key], p + key);        }    }} //上传文件;function uploadFile() {    const tasks = [];    const resourcesPath = localDirPath;    //目标路径文件夹;    const checkPath = remotePath;    for (let i = 0, len = uploadFiles.length; i < len; i++) {        const task = () => {            return new Promise(async (resolve, reject) => {                const _path = uploadFiles[i].path;                // const _path = uploadFiles[i];                const targetPath = checkPath + _path;                const putPath = resourcesPath + '/' + _path;                const dirpath = path.dirname(targetPath);                const fileName = path.basename(targetPath);                 client.cwd(dirpath, (cwdErr, dir) => {                    client.pwd((pwdErr, cwd) => {                        if (pwdErr) {                            resolve(pwdErr)                        } else {                            client.get(fileName, (err, res) => {                                if (res) {                                    console.log(`${targetPath} =====================已经存在了`);                                    resolve(true);                                } else {                                    const rs = fs.createReadStream(putPath);                                    client.put(rs, fileName, (putErr, data) => {                                        if (putErr) {                                            resolve(err);                                        } else {                                            console.log(targetPath + '文件上传成功');                                            resolve(true);                                        }                                    })                                }                            });                        }                    });                })            });        }        tasks.push(task);    }    return tasks;} //执行Promise的队列动作;function runPromiseArray(parray) { //这个方法可以放到G里    let p = Promise.resolve();    for (let promise of parray) {        p = p.then(promise);    }    return p;} //切换目录async function cwd(dirpath) {    return new Promise((resolve, reject) => {        client.cwd(dirpath, (err, dir) => {            resolve({ err: err, dir: dir });        })    });} function isFile(filepath) {  //判断是否是文件 Boolean    let stat = fs.statSync(filepath)    return stat.isFile()} function isDir(filepath) {  //判断是否是文件夹 Boolean    let stat = fs.statSync(filepath);    return stat.isDirectory();}

以上就是“node ftp怎么上传文件夹到服务器”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网服务器频道。

--结束END--

本文标题: node ftp怎么上传文件夹到服务器

本文链接: https://www.lsjlt.com/news/355787.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • node ftp怎么上传文件夹到服务器
    今天小编给大家分享一下node ftp怎么上传文件夹到服务器的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。完整代码...
    99+
    2023-07-05
  • 怎么上传ftp文件到云服务器
    要将文件上传到云服务器,你需要使用一个FTP客户端来执行上传操作。以下是一个基本的步骤:1. 安装一个FTP客户端,比如FileZi...
    99+
    2023-09-22
    云服务器
  • Java将文件上传到ftp服务器
    本文实例为大家分享了Java将文件上传到ftp服务器的具体代码,供大家参考,具体内容如下 首先简单介绍一下什么是FTP,以及如何在自己的电脑上搭建一个ftp服务器; —&...
    99+
    2022-11-13
  • Java实现文件上传到ftp服务器
    一、ftp简介 文件传输协议(File Transfer Protocol,FTP)是用于在网络上进行文件传输的一套标准协议,它工作在 OSI 模型的第七层, TCP 模型的第四层, 即应用层, 使用 TCP 传输而不是 UDP, 客户在和...
    99+
    2023-09-02
    服务器 java 网络
  • MobaXterm上传下载文件、文件夹到服务器上
      首先通过SSH与服务器建立连接,不懂的可查阅相关资料,CSDN里有很多介绍。 上传下载文件 可以在命令输入窗口,无需输入命令,按ctrl单击的同时鼠标右键出现以下左图,选择receive file using Z-modem或者send...
    99+
    2023-08-31
    linux
  • Shell中怎么上传zip压缩文件到FTP服务器
    本篇文章为大家展示了Shell中怎么上传zip压缩文件到FTP服务器,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。代码如下:# /bin/bash# creator:lihuib...
    99+
    2023-06-09
  • 免费ftp服务器怎么上传文件
    1. 打开FTP客户端软件,例如FileZilla、WinSCP等。2. 输入FTP服务器地址、用户名和密码,点击连接。3. 在FT...
    99+
    2023-06-11
    免费ftp服务器 服务器
  • 云服务器怎么上传文件夹
    在使用云服务器的过程中,用户需要注册一个账号,然后登录到云服务器上,在管理界面中找到文件夹,然后选择上传文件夹。在上传文件夹的过程中,用户需要输入文件夹的路径,并确保上传的文件夹已经存在,否则上传的文件夹将被删除。上传完成后,用户可以在自己...
    99+
    2023-10-28
    文件夹 上传 服务器
  • java怎么实现上传文件到FTP
    这篇“java怎么实现上传文件到FTP”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“java怎么实现上传文件到FTP”文章吧...
    99+
    2023-07-02
  • 怎么往云服务器上传文件夹
    第一步:选择一个云服务 在选择一个云服务之前,您需要考虑以下几点: 可靠性:选择一个有稳定的服务和安全措施的云服务提供商。确保您选择的云服务商能够为您提供高水平的安全保障,以防止数据丢失和泄漏。 容量:您需要确定云服务的容量和大小,以满...
    99+
    2023-10-28
    文件夹 上传 服务器
  • 怎么向华为云服务器上传文件夹到桌面
    打开华为云应用商店 在华为云应用商店中,可以下载和安装华为云的各种应用。首先,需要在华为云应用商店中搜索需要上传的文件夹,找到“文件夹上传”应用。然后点击安装按钮,系统会自动启动上传功能。 创建新文件夹 打开文件夹上传按钮后,可以...
    99+
    2023-10-27
    华为 文件夹 桌面
  • 如何用FTP上传文件到阿里云服务器
    在进行网站开发或者文件传输时,FTP(文件传输协议)是一个非常重要的工具。尤其在阿里云服务器上,使用FTP上传文件更是必不可少的操作。本文将详细介绍如何用FTP上传文件到阿里云服务器。 步骤一:连接阿里云服务器 首先,你需要通过阿里云的控制...
    99+
    2023-11-17
    阿里 如何用 上传文件
  • nodeftp上传文件夹到服务器案例详解
    完整代码示例如下: const ftp = require('ftp');//连接FTP const path = require('path'); const client = n...
    99+
    2023-05-14
    node ftp 上传 文件夹 服务器
  • SSH 上传文件及文件夹到linux服务器的方法
    现在服务器linux很多。是不是不会传文件?别急 下面就是方法: 一、上传文件到linux服务器 首先从你本地切换到你要上传文件的目录,接下来: scp 文件名字 服务器用户名字@服务器ip:目录 例子: scp ...
    99+
    2022-06-04
    linux ssh 上传文件 linux服务器上传文件
  • 怎么传文件到云服务器上
    要将文件传输到云服务器上,可以使用以下几种方法:1. 使用FTP:使用FTP客户端软件(如FileZilla)连接到云服务器的FTP...
    99+
    2023-08-18
    云服务器
  • python怎么上传文件到服务器
    要上传文件到服务器,可以使用Python的`requests`库来发送POST请求。以下是一个示例代码:```pythonimpor...
    99+
    2023-09-05
    python 服务器
  • 腾讯云服务器怎么上传文件夹
    腾讯云服务器可以上传文件夹,但需要遵循以下步骤: 打开腾讯云服务器的官网(https://tencent.qq.com/cloud)。 点击右上角的“上传”按钮。 在弹出的“上传文件夹”窗口中,填写上传文件夹所需的文件夹名称和路径。如图...
    99+
    2023-10-27
    腾讯 文件夹 上传
  • 手机怎么用云服务器传文件到u盘上面的文件夹
    打开手机上的文件管理器或者文件浏览器,进入云服务器的网站。 在网站上选择需要上传的文件夹或文件,并选择上传的文件类型和大小。 在上传按钮旁边点击“上传”或“下载”按钮。 在上传页面上输入上传密码,并确认上传。 上传成功后,在下方可以看到上...
    99+
    2023-10-28
    文件夹 服务器 文件
  • 网站上传到云服务器的文件夹是什么
    在上传到云服务器的文件夹通常是根据服务器操作系统和配置而定的,没有固定的名称。一般来说,在云服务器上存储网站文件的文件夹可以是任何名...
    99+
    2023-09-27
    云服务器
  • 怎么把文件上传到云服务器上
    要将文件上传到云服务器上,你可以按照以下步骤进行操作:1. 首先,你需要一个云服务器账号,并确保你已经购买了一个可用的服务器实例。2...
    99+
    2023-08-09
    云服务器
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作