2013-11-08 5 views
0

Я пытаюсь скопировать файл на сервере из одного каталога в другой с помощью Jsch. Я использую SFTP-протокол put и получаю методы для выполнения этой задачи. Я делаю так, потому что у меня нет доступа к серверу на shell. Ниже приведен пример моего кода и исключение, которое я получаю. Может кто-нибудь, пожалуйста, дайте мне знать, как его решить.Скопируйте файл на удаленном сервере из одного каталога в другой с помощью Jsch

OutputStream outputStream = null; 
    InputStream inputStream = null; 
    try 
    { 
     JSch jsch = new JSch(); 
      session = jsch.getSession(USER,HOST,PORT); 
    session.setPassword(PASS); 
    java.util.Properties config = new java.util.Properties(); 
    config.put("StrictHostKeyChecking", "no"); 
    config.put("PreferredAuthentications", "password"); 
    session.setConfig(config); 
    session.connect(); 
    channel = session.openChannel("sftp"); 
    channel.connect(); 
    channelSftp = (ChannelSftp)channel; 
     inputStream = channelSftp.get(fromFilename); 
    channelSftp.put(inputStream,toFilename); 
    } catch(Exception e){ 
     e.printStackTrace(); 
    } finally { 
     if(inputStream != null) 
      inputStream.close(); 
     if(outputStream != null) 
      outputStream.close(); 
     channelSftp.exit(); 
    channel.disconnect(); 
    session.disconnect(); 
    } 

Вот за исключением

4: java.io.IOException: error: 4: RequestQueue: unknown request id 12 
    at com.jcraft.jsch.ChannelSftp._put(ChannelSftp.java:689) 
    at com.jcraft.jsch.ChannelSftp.put(ChannelSftp.java:540) 
    at com.jcraft.jsch.ChannelSftp.put(ChannelSftp.java:492) 
+0

вы можете попробовать скачать файл, а затем поместить его в другой каталог .... –

+0

Да, я могу это сделать. Но я просто не хочу загружаться на локальный сервер, а затем удалять его с локального сервера. Любая идея о том, почему этот подход не работает – pinky

ответ

0

Вы должны сделать ГЭТ() работа в одном канале и поставить() операцию в другом канале. Это работает. Вот мой код.

public void cp (Session session, String source, String target) throws Exception { 
    log.info("COMMAND: cp " + source + " " + target); 

    if (!session.isConnected()) { 
     log.error("Session is not connected"); 
     throw new Exception("Session is not connected..."); 
    } 
    Channel upChannel = null; 
    Channel downChannel = null; 
    ChannelSftp uploadChannel = null; 
    ChannelSftp downloadChannel = null; 
    try { 
     upChannel = session.openChannel("sftp"); 
     downChannel = session.openChannel("sftp"); 
     upChannel.connect(); 
     downChannel.connect(); 
     uploadChannel = (ChannelSftp) upChannel; 
     downloadChannel = (ChannelSftp) downChannel; 
     FileProgressMonitor monitor = new FileProgressMonitor(); 
     InputStream inputStream = uploadChannel.get(source); 

     downloadChannel.put(inputStream, target, monitor); 
    } catch (JSchException e) { 
     log.error("Auth failure", e); 
     throw new Exception(e); 
    } finally { 
     if (upChannel == null || downChannel == null) { 
      System.out.println("Channel is null ..."); 
     }else if (uploadChannel != null && !uploadChannel.isClosed()){ 
      uploadChannel.exit(); 
      downloadChannel.exit(); 
      uploadChannel.disconnect(); 
      downloadChannel.disconnect(); 
     }else if (!upChannel.isClosed()) { 
      upChannel.disconnect(); 
      downChannel.disconnect(); 
     } 
     session.disconnect(); 
    } 
} 
Смежные вопросы