how to transfer a file through SFTP in java? [duplicate]
Asked Answered
M

1

19

How to transfer a file through SFTP in java? I want sample code for SFTP client. I want to embed the SFTP server in my application and the client should able to send a file to my application.

PS: This was asked for SFTP client. And This question is not a duplicate of other two questions.

Find the below link to implement SFTP.

https://codetransient.wordpress.com/2019/06/22/sftp-secured-file-transfer-protocol/

Marolda answered 12/2, 2013 at 10:17 Comment(0)
A
71

Try this code.

public void send (String fileName) {
    String SFTPHOST = "host:IP";
    int SFTPPORT = 22;
    String SFTPUSER = "username";
    String SFTPPASS = "password";
    String SFTPWORKINGDIR = "file/to/transfer";

    Session session = null;
    Channel channel = null;
    ChannelSftp channelSftp = null;
    System.out.println("preparing the host information for sftp.");

    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();
        System.out.println("Host connected.");
        channel = session.openChannel("sftp");
        channel.connect();
        System.out.println("sftp channel opened and connected.");
        channelSftp = (ChannelSftp) channel;
        channelSftp.cd(SFTPWORKINGDIR);
        File f = new File(fileName);
        channelSftp.put(new FileInputStream(f), f.getName());
        log.info("File transfered successfully to host.");
    } catch (Exception ex) {
        System.out.println("Exception found while tranfer the response.");
    } finally {
        channelSftp.exit();
        System.out.println("sftp Channel exited.");
        channel.disconnect();
        System.out.println("Channel disconnected.");
        session.disconnect();
        System.out.println("Host Session disconnected.");
    }
}   
Aphonia answered 12/2, 2013 at 10:46 Comment(11)
my destination directory needs sudo permission any idea how can I do that? @AphoniaRisa
what if I don't know the working directory. I know just the file path? How to handle cd command then?Dermatologist
@Risa Did you find a solution for having sudo permissions?Greenes
@DishiJain I changed the destination to a tmp folder and then used jcsh to execute 'mv' command to final destination with sudo. That worked for me.Risa
Sorry for lame question, but SFTPWORKINGDIR is destination directory or source directory?Adrianople
@Adrianople it is target directory.Totem
What library is used here ?Aristocrat
@Aphonia It is working for me. Thanks .....Glenine
What library are you using for this code? Several of the classes here are not found within core Java e.g. ChannelSftp, JSch.Angulo
JSCH library jcraft.com/jschBarbbarba
It worked fine, however it stores file of size 0kb. What can be the solution?Afterimage

© 2022 - 2024 — McMap. All rights reserved.