SFTP通过JSch传输时抛出错误4:失败。

18

我在尝试将一个文件从Windows上传到Unix服务器时遇到了一个奇怪的问题。错误信息“stack trace”的内容为 -

4: Failure
    at com.jcraft.jsch.ChannelSftp.throwStatusError(ChannelSftp.java:2846)
    at com.jcraft.jsch.ChannelSftp.checkStatus(ChannelSftp.java:2459)
    at com.jcraft.jsch.ChannelSftp._sendCLOSE(ChannelSftp.java:2465)
    at com.jcraft.jsch.ChannelSftp._put(ChannelSftp.java:683)
    at com.jcraft.jsch.ChannelSftp.put(ChannelSftp.java:475)
    at com.jcraft.jsch.ChannelSftp.put(ChannelSftp.java:365)

我在其他论坛上搜索了很久,但无法找到根本原因。 我还观察到一件事-我正在尝试SFTP的文件名为*.xml,当我将其更改为*.XML时,SFTP是“成功”的。 非常奇怪,找不到问题所在。 我正在使用JSch Java API尝试此操作。 但是我在尝试WinSCP前端时也遇到了同样的问题。

5个回答

21

OpenSSH SFTP服务器通常会因为很多不同的原因返回代码4(失败),而不提供任何详细信息。

您需要检查SFTP服务器日志以获取更多信息。

尽管最常见的原因是缺少免费磁盘空间或用户配额空间 - 这通常可以通过创建大小为零的文件来识别。


在我的情况下,目标路径是无效的:channelSftp.put(new ByteArrayInputStream("Hello World!".getBytes()),"/Bad/path/hello.txt"); - Brice Roncace

4

我曾经遇到同样的问题,当时很困惑,后来我意识到服务器文件夹的空间不足。请检查服务器可用空间。

命令:df 文件夹路径


和我一样,这是一个空间问题。 - maryf

2

我也遇到了同样的问题。请确保您的SFTP服务正在运行。如果已经在运行,那么重新启动此服务应该就能解决问题。


0

我曾经遇到过同样的问题。尝试了所有方法,结果发现我将超时时间设置为了我认为的30秒,但实际上是30毫秒。将其更改为30000毫秒解决了这个问题。

session.setTimeout(30000);

0

我曾经遇到过这个错误,原因是上传的文件名不被SFTP服务器使用的文件系统支持。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接