JSch中如何设置文件类型和文件传输模式?
How to set file type and file transfer mode in JSch?
我使用 Apache Common Net FTPClient
并在上传文件之前使用下面显示的方法设置了我的 ftpClient
。
ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
ftpClient.setFileTransferMode(FTP.BINARY_FILE_TYPE);
现在我尝试使用JSch。文件上传之前是否需要相同的设置以及它们的外观?谢谢
首先,从您的问题中不清楚您是否知道 JSch 和 Apache Commons Net FtpClient
各自使用完全不同且不相关的协议。 JSch 是 SSH/SFTP 客户端,而 FtpClient
是 FTP 客户端。
JSch 使用 SFTP 协议版本 3。
在SFTP协议版本3中,没有传输模式。或者换句话说,只有二进制传输模式。
即使 JSch 使用支持 ascii 模式的较新版本的 SFTP 协议,binary mode 在 SFTP.
中是默认的
所以你什么都不用做。
这与FTP协议形成对比,后者默认为ascii模式。因此,您已使用 FTP 显式切换到 binary 模式(在 Apache Commons Net 的情况下使用 FTPClient.setFileType
)。
至于 FTPClient.setFileTransferMode
– 您的 FTP 代码是错误的。该方法接受 *_TRANSFER_MODE
常量之一。从来没有 *_FILE_TYPE
。如果您使用 BINARY_FILE_TYPE
,它会导致向服务器发送无效的 MODE I
命令。这肯定会失败,因此根本没有效果。检查方法结果代码,肯定是 returns false
.
从您的 FTP 代码中删除调用。无需调用FTPClient.setFileTransferMode
。 Apache Commons Net 无论如何只支持默认的“流”模式(大多数 FTP 服务器也不支持任何其他模式)。
注意名称中的混淆。 ascii/binary 通常确实被称为“传输模式”。但在 FTP 协议规范中(RFC 959 的 3.1.1 节),它们实际上被称为“数据类型”,并使用 TYPE
命令进行管理。
虽然 FTP 规范称为“传输模式”,由 MODE
命令(第 3.4 节)管理,是完全不同类型的模式:stream/block/compressed。它们几乎从未被设定甚至被提及。
由于 Apache Commons Net FtpClient
混淆了设置“传输模式”的方法 .setFileTransferMode
,它经常导致像你一样的错误 – 人们错误地尝试使用 FTPClient.setFileTransferMode
在 binary/ascii "数据类型".
之间切换
我使用 Apache Common Net FTPClient
并在上传文件之前使用下面显示的方法设置了我的 ftpClient
。
ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
ftpClient.setFileTransferMode(FTP.BINARY_FILE_TYPE);
现在我尝试使用JSch。文件上传之前是否需要相同的设置以及它们的外观?谢谢
首先,从您的问题中不清楚您是否知道 JSch 和 Apache Commons Net FtpClient
各自使用完全不同且不相关的协议。 JSch 是 SSH/SFTP 客户端,而 FtpClient
是 FTP 客户端。
JSch 使用 SFTP 协议版本 3。
在SFTP协议版本3中,没有传输模式。或者换句话说,只有二进制传输模式。
即使 JSch 使用支持 ascii 模式的较新版本的 SFTP 协议,binary mode 在 SFTP.
中是默认的所以你什么都不用做。
这与FTP协议形成对比,后者默认为ascii模式。因此,您已使用 FTP 显式切换到 binary 模式(在 Apache Commons Net 的情况下使用 FTPClient.setFileType
)。
至于 FTPClient.setFileTransferMode
– 您的 FTP 代码是错误的。该方法接受 *_TRANSFER_MODE
常量之一。从来没有 *_FILE_TYPE
。如果您使用 BINARY_FILE_TYPE
,它会导致向服务器发送无效的 MODE I
命令。这肯定会失败,因此根本没有效果。检查方法结果代码,肯定是 returns false
.
从您的 FTP 代码中删除调用。无需调用FTPClient.setFileTransferMode
。 Apache Commons Net 无论如何只支持默认的“流”模式(大多数 FTP 服务器也不支持任何其他模式)。
注意名称中的混淆。 ascii/binary 通常确实被称为“传输模式”。但在 FTP 协议规范中(RFC 959 的 3.1.1 节),它们实际上被称为“数据类型”,并使用 TYPE
命令进行管理。
虽然 FTP 规范称为“传输模式”,由 MODE
命令(第 3.4 节)管理,是完全不同类型的模式:stream/block/compressed。它们几乎从未被设定甚至被提及。
由于 Apache Commons Net FtpClient
混淆了设置“传输模式”的方法 .setFileTransferMode
,它经常导致像你一样的错误 – 人们错误地尝试使用 FTPClient.setFileTransferMode
在 binary/ascii "数据类型".