簡體   English   中英

文件成功上傳,但是使用jsch sftp java在遠程服務器上上傳了0kb文件

[英]file uploading successfully, but 0kb file is uploading on remote server using jsch sftp java

我正在使用Jsch和Sftp協議在一個簡單的Java應用程序中將文件從本地計算機上傳到遠程服務器。

我的代碼沒有錯誤也沒有異常,並且可以成功運行,但是當我查看遠程位置時,文件以0kb的格式上傳,沒有擴展名,並且名為“ D”。

我已經嘗試了很多方法,但是我無法弄清錯誤。

這是我的代碼。

        String remoteDirectory = "D:\\Datastores\\RootStore\\Test\\";
        String localDirectory = "C:\\pdffiles\\";


        String fileToFTP = "demo.pdf";
        String SFTPHOST = "hostIPaddress";
        int SFTPPORT = 22;
        String SFTPUSER = "username";
        String SFTPPASS = "password";


        String local_filename = fileToFTP;
        String local_pathname = localDirectory;
        String remote_filename = fileToFTP;


        JSch jsch = null;
        Session session = null;
        ChannelSftp sftpChannel = null;


        try
        {
          jsch = new JSch();
          session = jsch.getSession(SFTPUSER, SFTPHOST);
          session.setPassword(SFTPPASS);
          session.setPort(SFTPPORT);
          session.setConfig("StrictHostKeyChecking", "no");
          session.setConfig("cipher.s2c", "aes128-ctr,aes128-cbc,3des-ctr,3des-cbc,blowfish-cbc,aes192-cbc,aes256-cbc,aes256-ctr");
          session.setConfig("cipher.c2s", "aes128-ctr,aes128-cbc,3des-ctr,3des-cbc,blowfish-cbc,aes192-cbc,aes256-cbc,aes256-ctr");
          session.connect();

          sftpChannel = (ChannelSftp)session.openChannel("sftp");
          sftpChannel.connect();

          System.out.println(sftpChannel);
          System.out.println(sftpChannel.getSession().isConnected());

          FileInputStream fileBodyIns = new FileInputStream(local_pathname + local_filename);

          System.out.println(local_pathname + local_filename);
          System.out.println(remoteDirectory + remote_filename);

          sftpChannel.put(fileBodyIns, remoteDirectory + remote_filename);
          fileBodyIns.close();

          sftpChannel.exit();
          session.disconnect();

          System.out.println("File uploaded successfully");
          return "File uploaded successfully";
        }
        catch (Exception e)
        {
            e.printStackTrace();
            return e.getMessage();
        }

我的連接成功,線路

System.out.println(sftpChannel.getSession().isConnected());

並且以下行成功打印

System.out.println("File uploaded successfully");
String remoteDirectory = "D:\\Datastores\\RootStore\\Test\\";

SFTP協議對遠程服務器上的文件路徑名使用類unix的命名方案。 文件分隔符為“ /”,並且不帶前導“ /”的路徑名被認為是相對於當前目錄的。 冒號和反斜杠沒有特殊含義。

根據這些規則,您要求遠程服務器在主目錄中創建一個名為“ D:\\ DataStores ...”的文件,並使用文字冒號和反斜杠。 如果您的遠程服務器是Cygwin OpenSSH服務器或基於Unix的服務器的某些其他端口,則SFTP服務器解釋文件名的方式與Windows操作系統解釋文件名的方式可能不匹配。

您需要找出正確的語法來引用通過此SFTP服務器的D:驅動器上的路徑。 如果是Cygwin SFTP服務器,我認為正確的語法應該是“ / cygdrive / d / Datastores / RootStore / Test / ...”。 如果SFTP服務器是其他供應商提供的,則可能需要查閱服務器文檔。 或者,您可以嘗試以交互方式登錄SFTP服務器,cd進入“ /”目錄,然后從那里進行探索。 如何引用D驅動器上的文件夾應該變得顯而易見。

我同意肯斯特的回答。 我在遠程Windows機器上有類似的問題,Linux風格的路徑解決了我的問題。 只是想添加,ChannelSftp的根目錄是遠程Windows機器上的C:\\磁盤,我不確定是否有辦法將文件放在D:\\磁盤上。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM