gpt4 book ai didi

java - 断开连接后使用 SFTP 下载 InputStream 时 JSch "pipe closed"

转载 作者:行者123 更新时间:2023-12-01 23:55:12 24 4
gpt4 key购买 nike

我正在使用 JSch 打开到远程服务器的 SFTP channel 。我使用以下代码打开连接并下载文件:

public org.springframework.core.io.Resource download(){
JSch jsch = new Jsch();
Session session = jsch.get("root", "192.168.1.10", 22);
session.setPassword("root");
session.setConfig("StrictHostKeyChecking","no");
session.connect();
ChannelSftp channelSftp = (ChannelSftp) session.openChannel("sftp");
channelSftp.connect();
InputStream is = channelSftp.get("/root/example.mp4");
channelSftp.exit();
session.disconnect();
return new org.springframework.core.io.InputStreamResource(is);
}

问题是:

  1. 如果我使用exit() 和/或disconnect() 方法,将会抛出Pipe closed 异常
  2. 如果不这样做,我的方法会成功返回一个 Resource,但 channel / session 仍处于 connected 状态。

所以我有一个问题,这个实现是否有问题?如果没有, session 数量是否会增加直到 SFTP 服务器拒绝,或者它们将在未来某个时间关闭,我该如何处理?

先谢谢你

最佳答案

断开连接后您将无法访问数据。

如果 API 需要 InputStream 然后您失去了控制权,您可以实现一个包装器 InputStream 实现,将所有调用委托(delegate)给您的 is ,并在调用 InputStream.close 后调用 disconnect


对于不太大的文件,更简单但效率较低的解决方案是将 JSch 流读取到内存(到 byte 数组)并返回数组或包装器 ByteArrayInputStream到您的 API。

关于java - 断开连接后使用 SFTP 下载 InputStream 时 JSch "pipe closed",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62834006/

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