我想从数据库发送一些数据。目前,我们的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()
而不将其保存到文件目录?
答案 0 :(得分:0)
只需使用
OutputStream os = remoteFile.getContent().getOutputStream();
,然后像在本地文件中那样在其中循环写入。
对于长时间开放的连接,如果读取速度慢/传输量较大,可能会出现问题。在这种情况下,您可能需要预先生成块并将其写入多个附录中。