Iva*_*tki 3 java ftp sftp jsch apache-commons-net
我使用 Apache Common NetFTPClient并在上传文件之前使用如下所示的方法进行设置ftpClient。
ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
ftpClient.setFileTransferMode(FTP.BINARY_FILE_TYPE);
Run Code Online (Sandbox Code Playgroud)
现在我尝试使用 JSch。文件上传之前是否需要相同的设置以及它们的外观?谢谢。
首先,从你的问题中并不清楚你是否知道JSch和Apache Commons NetFtpClient各自使用完全不同且不相关的协议。JSch 是 SSH/SFTP 客户端,而FtpClient是 FTP 客户端。
JSch 使用 SFTP 协议版本 3。
\n在SFTP协议版本3中,没有传输模式。或者说,只有二进制传输模式。
\n即使 JSch 使用支持ascii模式的较新版本的 SFTP 协议,二进制模式仍然是 SFTP 中的默认模式。
\n所以你不需要做任何事情。
\n这与 FTP 协议形成对比,FTP 协议默认为ascii模式。因此,您已明确使用 FTP 切换到二进制FTPClient.setFileType模式(在 Apache Commons Net 的情况下使用)。
至于FTPClient.setFileTransferMode\xe2\x80\x93 你的FTP代码是错误的。该方法接受常量之一*_TRANSFER_MODE。从来没有*_FILE_TYPE。如果您使用BINARY_FILE_TYPE,则会导致MODE I向服务器发送无效命令。这肯定会失败,因此根本没有任何效果。检查方法结果代码,肯定返回了false。
从 FTP 代码中删除该调用。没有必要打电话FTPClient.setFileTransferMode。无论如何,Apache Commons Net 仅支持默认的“流”模式(并且大多数 FTP 服务器也不支持任何其他模式)。
请注意名称中的混乱。Ascii/二进制实际上通常被称为“传输模式”。但在 FTP 协议规范(RFC 959的第 3.1.1 节)中,它们实际上被称为“数据类型”并使用TYPE命令进行管理。
虽然 FTP 规范所称的“传输模式”由MODE命令(第 3.4 节)控制,但它们是完全不同类型的模式:流/块/压缩。它们几乎从未被设定或什至被提及。
由于 Apache Commons NetFtpClient混淆了设置“传输模式”的方法的名称.setFileTransferMode,因此经常会导致像您那样的错误 \xe2\x80\x93 人们错误地尝试使用FTPClient.setFileTransferMode在二进制/ascii “数据类型”之间切换之间切换。
| 归档时间: |
|
| 查看次数: |
3676 次 |
| 最近记录: |