ftp 上传模式

在使用 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;
    }
});

参考资料

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,010评论 19 139
  • FTP服务概述 简单FTP构建及访问 VSFTP服务基础 用户禁锢、黑白名单 FTP并发及带宽限制 一、FTP服务...
    紫_轩阅读 7,739评论 3 25
  • win7 cmd管理员权限设置 net localgroup administrators 用户名 /add 把“...
    f675b1a02698阅读 5,385评论 0 11
  • 部分内容转载自搜狗百科 cmd是command的缩写.即命令提示符(CMD),是在OS / 2 , Windows...
    青冥之上阅读 2,429评论 0 24
  • linux资料总章2.1 1.0写的不好抱歉 但是2.0已经改了很多 但是错误还是无法避免 以后资料会慢慢更新 大...
    数据革命阅读 12,240评论 2 33