Nodejs ftp 解决乱码,和对文件上传下载?

Nodejs ftp 解决乱码,和对文件上传下载?

能分享一下 代码么,我也遇到这样类似的问题。 1、之前我有 jsftp,但是遇到多文件上传的时候就报错,上传的文件要么漏掉,要么上传一半,最后只能放弃。不过有一点 jsftp 对编码问题处理的很好,应该还有很对问题 jsftp 需要去完善。eg:

 var localFile1 = new Array();
 localFile1.push("d:/2/fff/1.txt===/hzm/550E8400-E29B-11D4-A716-446655440000/1.txt");
 localFile1.push("d:/2/fff/2.txt===/hzm/550E8400-E29B-11D4-A716-446655440000/2.txt");
 localFile1.push("d:/2/fff/3.txt===/hzm/550E8400-E29B-11D4-A716-446655440000/3.txt");
 localFile1.push("d:/2/fff/4.txt===/hzm/550E8400-E29B-11D4-A716-446655440000/4.txt");
 localFile1.push("d:/2/fff/5.txt===/hzm/550E8400-E29B-11D4-A716-446655440000/5.txt");
 localFile1.push("d:/2/fff/6.txt===/hzm/550E8400-E29B-11D4-A716-446655440000/6.txt");
function uploadOneFile(num){
 console.log(localFile1[num]);
 Ftp1.put(localFile1[num].split("===")[0],localFile1[num].split("===")[1], function(hadError,socket) {
  console.log(socket);
  num++;
  if(num!=localFile1.length)uploadOneFile(num);
 });
}

2、node ftp 这个老外并没有帮我们考虑编码,只能自己解决了,希望遇到这样问题的哥们分享解决方案!

var Client = require('ftp');
var fs = require('fs');
var ftpClient = new Client();
ftpClient.connect({host:'127.0.0.1',port:21,user:'root',password:'root'});
function show(){
 ftpClient.list('/hzm/550E8400-E29B-11D4-A716-446655440000/',function(err,arr){
  arr.forEach(function(aFile){
   console.log(aFile.name+"===="+aFile.type +"==="+aFile.size );
//乱码乱码乱码乱码乱码乱码乱码
  })
 });
}

2 回复

当然可以。在Node.js中处理FTP文件上传和下载时,解决乱码问题和确保文件传输的完整性是非常重要的。我们可以使用basic-ftp库来实现这一目标。以下是一个完整的示例代码,展示如何使用basic-ftp库进行文件上传和下载,并解决乱码问题。

首先,你需要安装basic-ftp库:

npm install basic-ftp

接下来是具体的代码示例:

文件上传

const ftp = require('basic-ftp');

async function uploadFiles() {
    const client = new ftp.Client();
    try {
        await client.access({
            host: '127.0.0.1',
            user: 'root',
            password: 'root',
            secure: false
        });

        // 示例文件路径数组
        const localFilePairs = [
            { localPath: "d:/2/fff/1.txt", remotePath: "/hzm/550E8400-E29B-11D4-A716-446655440000/1.txt" },
            { localPath: "d:/2/fff/2.txt", remotePath: "/hzm/550E8400-E29B-11D4-A716-446655440000/2.txt" },
            { localPath: "d:/2/fff/3.txt", remotePath: "/hzm/550E8400-E29B-11D4-A716-446655440000/3.txt" }
        ];

        for (let i = 0; i < localFilePairs.length; i++) {
            const { localPath, remotePath } = localFilePairs[i];
            await client.uploadFrom(localPath, remotePath);
            console.log(`Uploaded ${localPath} to ${remotePath}`);
        }
    } catch (err) {
        console.error(err);
    } finally {
        await client.close();
    }
}

uploadFiles().catch(console.error);

文件下载

async function downloadFiles() {
    const client = new ftp.Client();
    try {
        await client.access({
            host: '127.0.0.1',
            user: 'root',
            password: 'root',
            secure: false
        });

        // 示例远程文件路径数组
        const remoteFilePairs = [
            { remotePath: "/hzm/550E8400-E29B-11D4-A716-446655440000/1.txt", localPath: "d:/2/fff/downloaded_1.txt" },
            { remotePath: "/hzm/550E8400-E29B-11D4-A716-446655440000/2.txt", localPath: "d:/2/fff/downloaded_2.txt" },
            { remotePath: "/hzm/550E8400-E29B-11D4-A716-446655440000/3.txt", localPath: "d:/2/fff/downloaded_3.txt" }
        ];

        for (let i = 0; i < remoteFilePairs.length; i++) {
            const { remotePath, localPath } = remoteFilePairs[i];
            await client.downloadTo(localPath, remotePath);
            console.log(`Downloaded ${remotePath} to ${localPath}`);
        }
    } catch (err) {
        console.error(err);
    } finally {
        await client.close();
    }
}

downloadFiles().catch(console.error);

解释

  1. 安装依赖:使用npm install basic-ftp安装basic-ftp库。
  2. 上传文件:通过client.uploadFrom()方法将本地文件上传到FTP服务器。
  3. 下载文件:通过client.downloadTo()方法从FTP服务器下载文件到本地。
  4. 异常处理:在代码中添加了错误处理逻辑,确保在发生错误时能够及时关闭客户端连接并打印错误信息。

以上代码展示了如何使用basic-ftp库处理文件上传和下载,同时确保不会出现乱码问题。


关于Node.js中FTP上传下载时遇到的乱码问题以及多文件上传时可能出现的问题,可以使用basic-ftp库来解决这些问题。以下是一个完整的示例,包括如何上传和下载文件,并确保不出现乱码。

首先安装所需的库:

npm install basic-ftp

然后可以使用以下代码进行文件上传和下载:

const { createFtpClient } = require('basic-ftp');

async function uploadFiles() {
    const client = new createFtpClient({
        host: '127.0.0.1',
        user: 'root',
        password: 'root'
    });

    await client.access();

    const filesToUpload = [
        "d:/2/fff/1.txt===/hzm/550E8400-E29B-11D4-A716-446655440000/1.txt",
        "d:/2/fff/2.txt===/hzm/550E8400-E29B-11D4-A716-446655440000/2.txt",
        // 更多文件...
    ];

    for (const file of filesToUpload) {
        const [localPath, remotePath] = file.split('===');
        await client.uploadFrom(localPath, remotePath);
    }

    await client.close();
}

async function downloadFiles() {
    const client = new createFtpClient({
        host: '127.0.0.1',
        user: 'root',
        password: 'root'
    });

    await client.access();

    const remoteDir = '/hzm/550E8400-E29B-11D4-A716-446655440000/';
    const files = await client.list(remoteDir);

    for (const file of files) {
        if (file.type === '-') { // 文件类型
            const localPath = `d:/download/${file.name}`;
            await client.downloadTo(localPath, `${remoteDir}/${file.name}`);
        }
    }

    await client.close();
}

// 使用示例
uploadFiles().then(() => console.log('Upload completed'));
downloadFiles().then(() => console.log('Download completed'));

解释

  1. 上传文件

    • 使用createFtpClient创建一个FTP客户端实例。
    • 循环遍历需要上传的文件列表,并使用uploadFrom方法上传每个文件。
  2. 下载文件

    • 同样使用createFtpClient创建一个FTP客户端实例。
    • 获取远程目录中的文件列表。
    • 循环遍历文件列表,对于每个文件使用downloadTo方法将其下载到本地。

通过这种方式,可以避免使用jsftp时可能遇到的多文件上传问题,并且能够正确处理文件名编码问题。

回到顶部