NodeJs 使用FTP上传大文件(G级别)

       最近领导有一项要求是将本地文件夹下面的文件上传到FTP服务器上。由于本人之前做的上传的都是小文件,最多不超过8M的,对(G级)的文件上传暂时没有什么经验,然后结合网站上面的Demo看看的,看了很多帖子,都没能理解,再不就是需要积分下载,本着学习的态度,写一下自己的思路与实现方法,希望能给遇到同样问题的人一个参考。

       首先第一步,我们需要安装FTP模块和 fs文件模块,具体安装可以参考官方文档或者百度查找一下这里不做赘述。

下面开始代码的实现:

                                   

       第二步,我们要配置链接的账户名密码:

                                   NodeJs 使用FTP上传大文件(G级别)_第1张图片

      第三步,实现方法

                                NodeJs 使用FTP上传大文件(G级别)_第2张图片

       第四步,上传,

                              NodeJs 使用FTP上传大文件(G级别)_第3张图片

上面有注意的部分就是远程文件存放位置,一定要是ftp服务器upload下的位置,不然就会报错:找不到上传路径

第五步,执行文件,运行在终端执行该js 文件,node ftp.js

                  亲测3.5G 的文件,在不到1分钟就上传完成(内网)

   

如果我解决了您的疑问,点个赞,打赏一下,您的打赏是我为以后写出更优秀的博客的动力!谢谢。

 

NodeJs 使用FTP上传大文件(G级别)_第4张图片

                            

源码:

const ftp = require('ftp');//连接FTP

const path = require('path');

const client = new ftp();

const fs = require('fs');

 

client.on('ready',()=>{

console.log(new Date());

console.log('ftp client is ready');

});

client.on('close',()=>{

console.log('ftp client has close')

});

client.on('end',()=>{

console.log('ftp client has end')

});

client.on('error',(err)=>{

console.log('ftp client has an error : '+ JSON.stringify(err))

});

client.connect({

host: "10.28.96.251",

port: "21",

user: "ftpadm",

password: "s2d3jkil",

keepalive : 1000

});

 

//切换目录

function cwd(dirpath){

return new Promise((resolve,reject)=>{

client.cwd(dirpath,(err,dir)=>{

resolve({err : err,dir : dir});

})

});

}


 

//将文件上传到ftp目标地址

async function put(currentFile,targetFilePath){

const dirpath = path.dirname(targetFilePath);

const fileName = path.basename(targetFilePath);

const rs = fs.createReadStream(currentFile);

let {err : ea,dir} = await cwd(dirpath);//此处应对err做处理

if(ea){

return Promise.resolve({err : ea});

}

return new Promise((resolve,reject)=>{

client.put(rs,fileName,(err)=>{

resolve({err : err});

})

});

}

async function test (){

//文件上传

let {err : eb} = await put('./temp/Device42-15.11.02-vhd.7z','upload/lib/Device42-15.11.02-vhd.7z');

if(eb){

console.log(eb);

return;

}

console.log('文件上传成功')

console.log(new Date());

}

test();

 

 

 

 

 

 

 

 

你可能感兴趣的:(web前端)