2016-11-11 6 views
1
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-сервере. Я смущен о том, что писать вместо этого две строкиСохранение изображений на сервер SFTP с использованием java

File f = new File(FILETOTRANSFER); 

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

Я использую библиотеку JSch, чтобы связаться с SFTP

ответ

1

Проблема заключается в том, что вы загружаете изображение в BufferedImage, но это не представление, которое вы можете напрямую записать на SFTP-сервер.

Гораздо проще напрямую открыть InputStream по URL-адресу и сохранить его на 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)); 
+0

Последняя строка channelSftp.put (url.openStream(), path.substring (путь.lastIndexOf ('/'))); дать ошибку «Разрешение отказано». Но когда я сменил path.substring (путь.lastIndexOf ('/')) на «1.jpg», то его работа великолепна. Спасибо, что помогли. –

+0

Я понял, почему path.substring (path.lastIndexOf ('/')) не работает. Потому что он дает подстроку, начинающуюся с «/». И имя изображения (или файла) никогда не начинается с «/». –

+0

@ParthPatel я вижу. Вы можете добавить '+ 1' к возвращаемому значению' lastIndexOf'. Я обновил ответ. –