从数据库发送 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 块并将它们写在多个追加中。
我想从数据库发送一些数据。目前我们的 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 块并将它们写在多个追加中。