背景:实现文件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;}}}