2016-11-11 12 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サーバーに画像を保存する方法がわかりません。私は、この2行の代わりに書き込むかについて混乱しています私はSFTPで接続するためにJSCHライブラリを使用していますSFTPサーバーに画像を保存するには

File f = new File(FILETOTRANSFER); 

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

答えて

1

問題は、あなたが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)); 
+0

最後の行channelSftp.put(url.openStream()、path.substring(path.lastIndexOf( '/')))); エラー "Permission Denied"が返されます。しかし、私はpath.substring(path.lastIndexOf( '/'))を "1.jpg"に変更しました。 ありがとうございます。 –

+0

私はpath.substring(path.lastIndexOf( '/'))が動作しない理由を理解しました。 "/"から始まる部分文字列を与えるためです。そして画像(またはファイル)名は "/"から始まらない。 –

+0

@ParthPatelです。 'lastIndexOf'の戻り値に' + 1'を加えることができます。私は答えを更新しました。 –

関連する問題