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

时间:2020-08-03 20:59:50

标签: java sftp apache-commons-vfs

我想从数据库发送一些数据。目前,我们的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()而不将其保存到文件目录?

1 个答案:

答案 0 :(得分:0)

只需使用

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

,然后像在本地文件中那样在其中循环写入。

对于长时间开放的连接,如果读取速度慢/传输量较大,可能会出现问题。在这种情况下,您可能需要预先生成块并将其写入多个附录中。

相关问题