【问题标题】:Node js can't upload files to FTP when deployed and running on production serverNode js在生产服务器上部署和运行时无法将文件上传到FTP
【发布时间】:2020-03-15 20:58:45
【问题描述】:

我正在使用带有basic-ftp 的 Node JS (12.13.0) 和 NPM (6.13.19)。一切正常,当我从 localhost 在我的开发机器上运行代码时,我可以将文件上传到远程 FTP(没有 SSL,我的远程 FTP 不允许这样做)。

生产服务器托管在 Digital Ocean (Ubuntu 18.04.3) 我试图禁用防火墙,因为我认为这可能是问题的原因。我使用了sudo ufw disable,为了确保它被禁用,我使用sudo ufw status 检查当前状态,返回Status: inactive

这是我的代码

async function uploadImageToFtp(fileName, path) {
    const client = new ftp.Client()
    client.ftp.verbose = true
    try {
        await client.access({
            host: process.env.FTP_HOST,
            user: process.env.FTP_USER,
            password: process.env.FTP_PASSWORD,
            secure: false
        })
        await client.uploadFrom(path, "images/bd/" + fileName)
    } catch (err) {
        console.log(err)
    }
    client.close()
}

对生产的回应

Connected to EXTERNAL_IP_ADDRESS < 220 server ready - login please Login
security: No encryption
> USER username < 331 password required
> PASS ###

再次在 localhost 上一切正常,我们通过了这一步,开始将文件上传到相同的服务器和凭据。

在此之后,我再也没有收到任何响应,除了我的请求中出现 Bad Gateway 502 超时。

【问题讨论】:

标签: node.js ubuntu npm ftp digital-ocean


【解决方案1】:

我不知道库,但问题听起来像是 FTP 会话在活动模式下运行。这通常是个问题,所以如果它处于主动模式,我建议尝试将您的客户端设置为请求被动模式。

【讨论】:

  • 根据 basic-ftp 它已经在被动模式下运行。但是交易是在 PASS 之后处理的,这意味着我的生产服务器永远不会得到这个调用。
猜你喜欢
  • 1970-01-01
  • 2019-05-24
  • 1970-01-01
  • 2020-11-29
  • 1970-01-01
  • 1970-01-01
  • 2019-10-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多