从数据库发送 SFTP 文件而不实际创建文件

Send SFTP file from database without actually creating a file

我想从数据库发送一些数据。目前我们的 SFTP 是这样设置的(使用 apache commons vsf2 库)。

    try(StandardFileSystemManager manager = new StandardFileSystemManager())
        File file = generateFileFromDatabase();
        manager.init();
   
        FileSystemOptions opts = new FileSystemOptions();
        SftpFileSystemConfigBuilder.getInstance().setStrictHostKeyChecking(
                opts, "no");
        SftpFileSystemConfigBuilder.getInstance().setUserDirIsRoot(opts, true);
        SftpFileSystemConfigBuilder.getInstance().setTimeout(opts, 10000);

        // Create localfile object
        FileObject localFile = manager.resolveFile(file.getAbsolutePath());

        // Create remote file object
        FileObject remoteFile = manager.resolveFile(sftpUri, opts);

        // Copy local file to sftp server
        remoteFile.copyFrom(localFile, Selectors.SELECT_SELF);


    } catch (Exception ex) {
        ex.printStackTrace();
    }

但是,generateFileFromDatabase() 通过调用 new 关键字来工作,如

       return new File();

我不想要这个,因为每次调用 generateFileFromDatabase() 时都会在文件系统中保存一个新文件。有没有办法生成一个File()而不保存到文件目录?

只需使用

OutputStream os = remoteFile.getContent().getOutputStream();

然后在其中循环写入,就像处理本地文件一样。

对于长时间打开的连接的缓慢 reading/large 传输来说,这可能是个问题。在那种情况下,您可能需要 pre-produce 块并将它们写在多个追加中。