You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Node.js promise-ftp上传文件报错:找不到文件或目录

解决promise-ftp上传文件报错553(Can't open that file)的问题

针对你遇到的553错误,这个报错本质是FTP服务器端无法创建/写入目标文件,和本地文件是否存在无关。下面是具体排查和解决步骤:

1. 检查FTP目标路径的有效性

  • 确认目标目录存在:如果destPath包含子目录(比如/data/inventory.txt),必须先在FTP服务器上创建/data目录——FTP不会自动递归创建目录,目录不存在直接报553。
  • 使用绝对路径:避免用相对路径(比如./inventory.txt),因为FTP登录后的默认工作目录可能不是你预期的位置,直接写服务器的绝对路径(比如/public/inventory.txt)更可靠。
  • 排查文件名问题:如果文件名包含空格、中文或特殊符号(比如#、&),部分FTP服务器不支持,改成纯英文数字的文件名测试。

2. 验证FTP账号权限

  • 确认你的FTP账号对目标目录有写入权限:很多553错误是因为账号只能读不能写,或者目录权限被限制。
  • 检查服务器上传规则:部分FTP服务器会限制文件类型、大小,或者禁止上传到根目录,尝试上传到服务器允许的目录(比如/uploads)。

3. 优化代码上传方式

用绝对路径指定本地文件

避免相对路径的歧义,用path.resolve生成本地文件的绝对路径:

const filePath = path.resolve(__dirname, 'inventory.txt');
console.log('本地绝对路径:', filePath); // 打印确认路径正确
await ftp.put(filePath, destPath);

用可读流上传

直接传入文件流比文件路径更稳定,能避免部分文件读取的隐性问题:

const readStream = fs.createReadStream('./inventory.txt');
await ftp.put(readStream, destPath);

确保FTP连接状态正常

在上传前确认已成功连接并登录,添加日志排查:

async function upload() {
  const ftp = new PromiseFtp();
  try {
    await ftp.connect({
      host: '你的FTP地址',
      user: '账号',
      password: '密码'
    });
    console.log('FTP连接成功');
    // 上传操作...
  } catch (err) {
    console.error('连接失败:', err);
  } finally {
    await ftp.end();
  }
}

4. 开启被动模式

部分FTP服务器强制要求被动模式,在连接时开启pasv选项:

await ftp.connect({
  host: '你的FTP地址',
  user: '账号',
  password: '密码',
  pasv: true // 启用被动模式
});

5. 最小化测试代码

用最简代码排除其他业务逻辑干扰,先确保基础上传功能正常:

const PromiseFtp = require('promise-ftp');
const fs = require('fs');
const path = require('path');

async function testUpload() {
  const ftp = new PromiseFtp();
  try {
    await ftp.connect({
      host: '你的FTP主机',
      user: '你的用户名',
      password: '你的密码'
    });
    console.log('已连接FTP');

    const localFile = path.resolve(__dirname, 'inventory.txt');
    console.log('本地文件存在:', fs.existsSync(localFile));

    // 尝试上传到FTP根目录
    await ftp.put(localFile, '/inventory_test.txt');
    console.log('上传成功');

    await ftp.end();
  } catch (err) {
    console.error('错误详情:', err);
    await ftp.end();
  }
}

testUpload();

内容的提问来源于stack exchange,提问作者m_dot_dev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 18:37:32