您好,登錄后才能下訂單哦!
這篇文章主要介紹“nodejs怎么連接ftp實現上傳下載”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“nodejs怎么連接ftp實現上傳下載”文章能幫助大家解決問題。
//ftp 模塊是目前找到的還不錯的,對于ftp的基本功能都支持 npm install ftp
const ftp = require('ftp');//連接FTP const client = new ftp(); client.on('ready',()=>{ console.log('ftp client is ready'); }); client.connect({ host : '***.***.***.***', port : '****', user : '***', password : '***', keepalive : 1000 });
//列出目標目錄 function list(dirpath){ return new Promise((resolve,reject)=>{ client.list((err,files)=>{ resolve({err : err,files : files}); }) }); } async function test (){ //list 列表功能 let {err,files} = await list(); if(err){ console.log(err); return } console.log(`獲得文件列表:`+files.length); console.log(files); } test();
//切換目錄 function cwd(dirpath){ return new Promise((resolve,reject)=>{ client.cwd(dirpath,(err,dir)=>{ resolve({err : err,dir : dir}); }) }); }
有了目錄切換,那么在list函數中的dirpath就可以使用啦。如下:
//列出目標目錄 //列出目標目錄 async function list(dirpath){ let {err : ea,dir } = await cwd(dirpath); return new Promise((resolve,reject)=>{ client.list((err,files)=>{ resolve({err : err,files : files}) }) }); }
//下載文件 async function get(filePath){ const dirpath = path.dirname(filePath); const fileName = path.basename(filePath); let {err : ea,dir} = await cwd(dirpath); return new Promise((resolve,reject)=>{ client.get(fileName,(err,rs)=>{ let ws = fs.createWriteStream(fileName); rs.pipe(ws); resolve({err : err}); }); }); }
//將文件上傳到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}); }) }); }
const ftp = require('ftp');//連接FTP const path = require('path'); const client = new ftp(); const fs = require('fs'); client.on('ready',()=>{ 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 : '***',//這個就不提供啦 port : '***', user : '***', password : '***', keepalive : 1000 }); //列出目標目錄 async function list(dirpath){ let {err : ea,dir } = await cwd(dirpath); return new Promise((resolve,reject)=>{ client.list((err,files)=>{ resolve({err : err,files : files}) }) }); } //切換目錄 function cwd(dirpath){ return new Promise((resolve,reject)=>{ client.cwd(dirpath,(err,dir)=>{ resolve({err : err,dir : dir}); }) }); } //下載文件 async function get(filePath){ const dirpath = path.dirname(filePath); const fileName = path.basename(filePath); let {err : ea,dir} = await cwd(dirpath); return new Promise((resolve,reject)=>{ client.get(fileName,(err,rs)=>{ let ws = fs.createWriteStream(fileName); rs.pipe(ws); resolve({err : err}); }); }); } //將文件上傳到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 (){ //list 列表功能 let {err,files} = await list('/attachment/byycampus/resource'); if(err){ console.log(err); return } console.log(`獲得文件列表:`+files.length); console.log(files); //下載文件 let {err : ea} = await get('/attachment/byycampus/resource/201812/14/201812141035222541381967.jpg'); if(ea){ console.log(ea); return; } console.log('文件下載成功') //文件上傳 let {err : eb} = await put('201812141035222541381967.jpg','/attachment/a.jpg'); if(eb){ console.log(eb); return; } console.log('文件上傳成功') } test();
踩坑記錄:
測試過程中發現,有的ftp服務器傳輸速度正常,而有的ftp服務器傳輸速度則是非常慢!慢到平均一張十幾K的圖片都能傳十幾秒的程度!經過檢查發現,這類ftp是采用的被動連接模式。
對此,查找github官方文檔https://github.com/mscdex/node-ftp , 發現connect
函數中有一個pasvTimeout
選項涉及到被動連接超時設置,于是測試了一下,將上面的連接代碼改成如下:
const ftp = require('ftp');//連接FTP const client = new ftp(); client.on('ready',()=>{ console.log('ftp client is ready'); }); client.connect({ host : '***.***.***.***', port : '****', user : '***', password : '***', keepalive : 1000, pasvTimeout:1000 });
再次測試,傳輸速度慢的問題得到解決!
關于“nodejs怎么連接ftp實現上傳下載”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。