使用 java 将图像保存到 SFTP 服务器

Save images to SFTP server using java

public static void main(String[] args) {
String SFTPHOST = "10.20.30.40";
int    SFTPPORT = 22;
String SFTPUSER = "username";
String SFTPPASS = "password";
String SFTPWORKINGDIR = "/export/home/kodehelp/";

Session     session     = null;
Channel     channel     = null;
ChannelSftp channelSftp = null;

try{
            JSch jsch = new JSch();
            session = jsch.getSession(SFTPUSER,SFTPHOST,SFTPPORT);
            session.setPassword(SFTPPASS);
            java.util.Properties config = new java.util.Properties();
            config.put("StrictHostKeyChecking", "no");
            session.setConfig(config);
            session.connect();
            channel = session.openChannel("sftp");
            channel.connect();
            channelSftp = (ChannelSftp)channel;
            channelSftp.cd(SFTPWORKINGDIR);
            URL url = new URL("https://65.media.tumblr.com/839a07990f2b1ffa32065513c6224493/tumblr_oe6t3aYpHc1qfilt7o1_500.jpg");
            BufferedImage image = null;
            image = ImageIO.read(url);

            **File f = new File(FILETOTRANSFER);
            channelSftp.put(new FileInputStream(f), f.getName());**
    }catch(Exception ex){
        ex.printStackTrace();
    }

}

我不知道,如何将图像存储到 SFTP 服务器。我对写什么而不是这两行感到困惑

File f = new File(FILETOTRANSFER);

channelSftp.put(new FileInputStream(f), f.getName());

我正在使用 JSCH 库连接 SFTP

问题是您正在将图像加载到 BufferedImage,但这不是您可以直接写入 SFTP 服务器的表示。

直接在 URL 上打开 InputStream 并将其保存到 SFTP 服务器要容易得多。 (使用 url.openStream()

然后您需要想出一个合适的文件名 - 这里我在最后一个斜杠后取 URL 的最后一部分,这与您在代码中所做的效果相同。

URL url = new URL(
        "https://65.media.tumblr.com/839a07990f2b1ffa32065513c6224493/tumblr_oe6t3aYpHc1qfilt7o1_500.jpg");
String path = url.getPath();
channelSftp.put(url.openStream(),path.substring(path.lastIndexOf('/')+1));