java - 使用 Spring 集成/JCraft JSch 在 SFTP 服务器上内部复制文件

标签 java spring copy sftp jsch

我想知道是否有办法将 SFTP 服务器上的文件复制到同一 SFTP 服务器上的另一个目录。我想执行此操作,而无需将文件放入客户端,然后将其设置在其他文件夹中。当然,这可以很好地工作,但我想这会产生更多的开销,所以如果可能的话,我想避免这种情况。我目前正在使用基于 JCraft JSch 的 Spring 集成。

到目前为止,我还没有找到任何没有中介的方法来做到这一点。

另一种方法是打开 SSH channel 并仅使用 cp 命令,但在我看来这也不太漂亮。

提前致谢!

最佳答案

核心SFTP协议(protocol)不支持复制远程文件。

copy-file extension to the protocol 草案,但只有少数 SFTP 服务器支持(例如 ProFTPD mod_sftp 和 Bitvise SFTP 服务器)。

在最广泛使用的 OpenSSH SFTP 服务器中,只有最新的 version 9.0 支持它。

而且 JSch 库也不支持它。

<小时/>

另请参阅我对 How can I copy/duplicate a file to another directory using SFTP? 的回答

<小时/>

因此,不幸的是,实际上在“exec” channel ( ChannelExec )上使用 cp shell 命令是最好的可用方法(假设您连接到 *nix 服务器并且具有 shell 访问权限)。

<小时/>

如果您没有 shell 访问权限,那么您唯一的选择就是将文件下载到本地临时文件夹并将其上传回新位置(或使用流,以避免临时文件)。另请参阅:

关于java - 使用 Spring 集成/JCraft JSch 在 SFTP 服务器上内部复制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37664612/

相关文章:

java - JScrollpane 外观和感觉

java - 如何在 hibernate 中指定 Double 的精度?

java - Spring 3.0 依赖注入(inject)的最小 JAR

java - spring boot中为静态资源设置setCachePeriod

file - 根据今天的日期创建文件夹并使用批处理文件将文件复制到新文件夹中

java - 使用 CXF 在 Web 服务请求上添加 header

java - 如何列出实现给定接口(interface)集的类路径上的所有类

eclipse - 在自定义 RCP 应用程序中使用 org.eclipse 剪切/复制/粘贴

javascript - 当我尝试复制、剪切和 Ctrl+Space 时,Eclipse 在 JavaScript 文件上挂起

java - 为什么 Java 创建的两个子进程表现不同?