如何使用jsch使用base64编码将文件传输到sftp

How to transfer a file to sftp using jsch using base64 encoding

我正在将文件编码为 base64 字符串。我想使用 JSch 将其传输到 sftp 文件夹而不创建本地文件。我该怎么做?

您可能会使用方法

void put(InputStream src, String dst, SftpProgressMonitor monitor, int mode)

在 class ChannelSftp. JSch also provides an example 中关于如何设置和取消 SFTP 会话。

我在ChannelSftp中使用了put(String src, String dst)方法class

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();
    }
}