【问题标题】:Java - Using JSch but getting an error when trying to move a file on FTP - %RNFR-bad%Java - 使用 JSch 但尝试在 FTP 上移动文件时出错 - %RNFR-bad%
【发布时间】:2020-08-17 04:08:11
【问题描述】:

我正在尝试使用重命名功能并不断收到此错误。 堆栈跟踪:

3: %RNFR-bad%
    at com.jcraft.jsch.ChannelSftp.throwStatusError(ChannelSftp.java:2873)
    at com.jcraft.jsch.ChannelSftp.rename(ChannelSftp.java:1950)
    ...

这是我用来移动文件的方法

private void moveFile(String sourcePath, String destinationPath) {
    try {
        System.out.println("Move: " + sourcePath + " to: " + destinationPath);
        sftp.rename(sourcePath, destinationPath);  //sftp = ChannelSftp
    } catch (SftpException e) {
        e.printStackTrace();
    }
}

这是我的 println 的输出:

Move: /SND/OUTBOUND/TestOutboundFile1.txt to: /SND/OUTBOUND/PROCESSING/TestOutboundFile1.txt

我已经尝试了一些其他的选项(get then put、多个连接等),但总是出现相同的错误,或者它只是坐着挂起(这发生在 get then put 方法中)。我在网上看到的一切都说这应该和我的方法一样简单,但我似乎无法让它发挥作用。也找不到任何有用的“RNFR-bad”错误。

目标目录已存在且为空。我错过了什么?非常感谢任何帮助。

编辑:这最终是一个权限问题,并且在管理员授予我的帐户正确的权限后,上面发布的代码运行良好。我能够创建和删除文件和目录,但在修改帐户权限之前无法重命名文件。

【问题讨论】:

  • 您可以使用任何命令行/GUI SFTP 客户端移动文件吗?
  • @MartinPrikryl 不,我得到相同的 %RNFR-bad% 错误。
  • 好的,那么你没有编程问题。请在Super User 或Server Fault 询问。或者更好地支持您的 SFTP 服务器供应商/提供商。
  • @MartinPrikryl 谢谢好友。因为除了移动文件(重命名)之外我可以做任何事情,我认为我做错了什么。我什至没有想过在我的代码之外尝试。我在此主题的其他问题上遇到了您的 cmets/answers,再次感谢。

标签: java sftp jsch


【解决方案1】:
3: %RNFR-bad%

SFTP error code 3 表示“权限被拒绝”。这意味着您收到错误,因为您在远程系统上没有执行您尝试执行的文件移动操作的权限。

"%RNFR-bad%" 似乎没有意义。我的猜测是远程 SFTP 服务器正在使用localized messages,并且它没有针对这种情况的正确消息,或者它以其他方式出现故障。

【讨论】:

  • 我有读/写/删除权限,可以创建和删除目录和文件。其他人控制服务器,我需要要求什么特定的东西才能允许这样做吗?
猜你喜欢
  • 2013-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-27
相关资源
最近更新 更多