gpt4 book ai didi

java - JSch中如何设置文件类型和文件传输模式?

转载 作者:行者123 更新时间:2023-12-04 16:42:15 25 4
gpt4 key购买 nike

我使用 Apache Common Net FTPClient 并在上传文件之前使用下面显示的方法设置了我的 ftpClient

ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
ftpClient.setFileTransferMode(FTP.BINARY_FILE_TYPE);

现在我尝试使用 JSch。文件上传之前是否需要相同的设置以及它们的外观?谢谢。

最佳答案

首先,从您的问题中不清楚,您是否知道 JSch 和 Apache Commons Net FtpClient 各自使用完全不同且不相关的协议(protocol)。 JSch 是 SSH/SFTP 客户端,而 FtpClient 是 FTP 客户端。


JSch 使用 SFTP 协议(protocol)版本 3。

在 SFTP 协议(protocol)版本 3 中,没有传输模式。或者换句话说,只有binary的传输方式。

即使 JSch 使用了更新版本的 SFTP 协议(protocol),它支持 ascii 模式,binary 模式仍然是 SFTP 中的默认模式。

所以你不必做任何事情。

这与默认为 ascii 模式的 FTP 协议(protocol)形成对比。因此,您已经通过 FTP 显式切换到 binary 模式(在 Apache Commons Net 的情况下使用 FTPClient.setFileType)。


至于FTPClient.setFileTransferMode – 您的 FTP 代码错误。该方法接受 *_TRANSFER_MODE 常量之一。绝不是 *_FILE_TYPE。如果您使用 BINARY_FILE_TYPE,则会导致向服务器发送无效的 MODE I 命令。这肯定会失败,因此根本没有效果。检查方法结果代码,肯定返回false

从您的 FTP 代码中删除调用。无需调用FTPClient.setFileTransferMode。无论如何,Apache Commons Net 只支持默认的“流”模式(大多数 FTP 服务器也不支持任何其他模式)。


注意名称中的混淆。 ascii/binary 通常确实被称为“传输模式”。但在 FTP 协议(protocol)规范(RFC 959 的第 3.1.1 节)中,它们实际上被称为“数据类型”,并使用 TYPE 命令进行管理。

虽然 FTP 规范称为“传输模式”,由 MODE 命令(第 3.4 节)控制,但它们是完全不同的模式:流/ block /压缩。它们几乎没有被设置甚至被提及。

由于 Apache Commons Net FtpClient 混淆了设置“传输模式”的方法 .setFileTransferMode,它经常导致像你一样的错误 – 人们错误地尝试使用FTPClient.setFileTransferMode 在二进制/ascii “数据类型”之间切换

关于java - JSch中如何设置文件类型和文件传输模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57920774/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com