当前位置: 代码迷 >> 综合 >> sftp下载文件过程中报错:“java.io.IOException: Pipe closed” 解决:inputStream复制
  详细解决方案

sftp下载文件过程中报错:“java.io.IOException: Pipe closed” 解决:inputStream复制

热度:17   发布时间:2023-12-14 14:08:43.0

背景:实现文件SFTP上传和下载功能,公司一开始实现是直接上传到服务器,生产环境权限不足不能进行新建文件,改进为sftp上传下载,在下载的过程中出现以下报错

sftp下载文件过程中报错:“java.io.IOException: Pipe closed”
原因:关闭SFTP连接的时候InputStream流也随着关闭
改造:我从下载SFTP流里面读取字节返回,再把读取的字节放到流里面上传外部SFTP,这样问题就解决了。

    public class StreamOperateUtil {
    public static void main(String[] args) throws FileNotFoundException {
    // 从sftp上请求下载InputStream is = sFtpUtils.download(filePath, fileName, sftp);// 输入流转换为输出流ByteArrayOutputStream baos = cloneInputStream(is);// 关闭sftpsFtpUtils.disConnect(sftp);// 打开新的输入流 InputStream stream1 = new ByteArrayInputStream(baos.toByteArray());  }private static ByteArrayOutputStream cloneInputStream(InputStream input) {
    try {
    ByteArrayOutputStream baos = new ByteArrayOutputStream();byte[] buffer = new byte[1024];int len;while ((len = input.read(buffer)) > -1) {
    baos.write(buffer, 0, len);}baos.flush();return baos;} catch (IOException e) {
    e.printStackTrace();return null;}}}
  相关解决方案