最近领导有一项要求是将本地文件夹下面的文件上传到FTP服务器上。由于本人之前做的上传的都是小文件,最多不超过8M的,对(G级)的文件上传暂时没有什么经验,然后结合网站上面的Demo看看的,看了很多帖子,都没能理解,再不就是需要积分下载,本着学习的态度,写一下自己的思路与实现方法,希望能给遇到同样问题的人一个参考。
首先第一步,我们需要安装FTP模块和 fs文件模块,具体安装可以参考官方文档或者百度查找一下这里不做赘述。
下面开始代码的实现:
第二步,我们要配置链接的账户名密码:
第三步,实现方法
第四步,上传,
上面有注意的部分就是远程文件存放位置,一定要是ftp服务器upload下的位置,不然就会报错:找不到上传路径
第五步,执行文件,运行在终端执行该js 文件,node ftp.js
亲测3.5G 的文件,在不到1分钟就上传完成(内网)
如果我解决了您的疑问,点个赞,打赏一下,您的打赏是我为以后写出更优秀的博客的动力!谢谢。
源码:
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();