91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

nodejs怎么連接ftp實現上傳下載

發布時間:2023-04-10 16:01:02 來源:億速云 閱讀:145 作者:iii 欄目:開發技術

這篇文章主要介紹“nodejs怎么連接ftp實現上傳下載”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“nodejs怎么連接ftp實現上傳下載”文章能幫助大家解決問題。

依賴

//ftp 模塊是目前找到的還不錯的,對于ftp的基本功能都支持
npm install ftp

連接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
});

ftp 獲取列表 list

//列出目標目錄
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();

nodejs怎么連接ftp實現上傳下載

ftp 目錄切換

//切換目錄
function cwd(dirpath){
    return new Promise((resolve,reject)=>{
        client.cwd(dirpath,(err,dir)=>{
            resolve({err : err,dir : dir});
        })
    });
}

FBI WARNING : 這里提醒下,在本示例中的所有代碼都在同一個文件中,后面會給出完整示例代碼。

有了目錄切換,那么在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})
        })
    });
}

ftp下載文件

//下載文件
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上傳文件

//將文件上傳到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實現上傳下載”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

丰县| 黄大仙区| 长治市| 长垣县| 福建省| 榆社县| 东海县| 长顺县| 托克托县| 舒城县| 金山区| 南充市| 通海县| 南木林县| 乐安县| 桓台县| 娱乐| 嵩明县| 广安市| 滨州市| 金门县| 阿拉善左旗| 全南县| 探索| 来凤县| 枝江市| 台湾省| 蓝山县| 大关县| 宣化县| 长葛市| 健康| 朝阳市| 当雄县| 黄浦区| 东明县| 临夏市| 文山县| 井研县| 彭州市| 万年县|