美文网首页
ftp 上传模式

ftp 上传模式

作者: vivaxy | 来源:发表于2017-04-17 13:09 被阅读173次

在使用 nodejs 实现 ftp 文件上传的过程中,我发现文本文件可以正常上传,但是图片文件则不行。图片被上传后,文件内容被更改了,无法正常打开了,文件大小也不一致了。

使用的是 jsftp 包。参考了 ftp-deploy 包。

尝试了几个可能的问题:

  • useList
  • 文件系统编码,有问题的 ftp 的编码是 GBK,而 nodejs 默认编码是 utf8
  • 上传模式:ASCII 还是 binary

在尝试后发现问题是由上传模式导致的,上传非文本文件时应该是用 binary 模式,即在登录后键入 type I

使用命令行时,登录后默认会开启 binary 模式,可能是 ftp 服务器配置的,但是通过 jsftp 客户端登录时却没有默认开启,所以需要手动指定一下。

简单的代码如下:

import JSFtp from 'jsftp';

const ftp = new JSFtp({
    host,
    port,
});

ftp.raw(`user ${user}`, (err, {code}) => {
    if (err) {
        throw err;
    }
    if (code === 331) {
        ftp.raw(`pass ${pass}`, (_err, {code}) => {
            if (_err) {
                throw _err;
            }
            if (code === 230) {
                ftp.raw('type I', (__err) => {
                    if (__err) {
                        throw __err;
                    }
                    ftp.put(localFilPath, remoteFilePath, (___err) => {
                        if (___err) {
                            throw ___err;
                        }
                        ftp.raw('quit', (____err) => {
                            if (____err) {
                                throw ____err;
                            } else {
                                ftp.destroy();
                            }
                        });
                    })
                });
            } else {
                throw _err;
            }
        });
    } else {
        throw err;
    }
});

参考资料

相关文章

网友评论

      本文标题:ftp 上传模式

      本文链接:https://www.haomeiwen.com/subject/mgrtzttx.html