【发布时间】:2018-02-07 23:21:46
【问题描述】:
我正在将我的文件编码为 base64 字符串。我想使用 JSch 将其传输到 sftp 文件夹而不创建本地文件。我该怎么做?
【问题讨论】:
我正在将我的文件编码为 base64 字符串。我想使用 JSch 将其传输到 sftp 文件夹而不创建本地文件。我该怎么做?
【问题讨论】:
你可能会使用这个方法
void put(InputStream src, String dst, SftpProgressMonitor monitor, int mode)
在课堂上ChannelSftp。 JSch 还提供了一个example,介绍如何设置和关闭 SFTP 会话。
【讨论】:
我在 ChannelSftp 类中使用了put(String src, String dst) 方法
private void getConnection(String username, String hostname, String password) {
JSch jsch = new JSch();
java.util.Properties config = new java.util.Properties();
config.put("StrictHostKeyChecking", "no");
try {
session = jsch.getSession(username, hostname, 22);
session.setConfig(config);
session.setPassword(password);
session.connect();
channel = session.openChannel(CHANNEL_TYPE);
channel.connect();
} catch (JSchException e) {
e.printStackTrace();
}
}
private void disconnectConnections() {
if (channel.isConnected()) {
channel.disconnect();
}
if (session.isConnected()) {
session.disconnect();
}
}
private String getConfiguration(String key) {
return configuration.getString(key);
}
public void uploadToSftp(String sftpFileLocation, String fileToBeUploaded, String filename) {
if (session == null || channel == null || !session.isConnected() || !channel.isConnected()) {
getConnection(getConfiguration(USERNAME), getConfiguration(HOST), getConfiguration(PASSWORD));
}
try {
channelSftp = (ChannelSftp) channel;
channelSftp.cd(sftpFileLocation);
byte[] data = BaseEncoding.base64().decode(fileToBeUploaded);
InputStream is = new ByteArrayInputStream(data);
channelSftp.put(is, filename);
disconnectConnections();
} catch (SftpException e) {
e.printStackTrace();
}
}
【讨论】: