3年前にもこのような作業がありました。ここ最近お客様現場でまた同じ作業がありました。
本記事では違うサーバーの間に画像の転送のサンプルを掲載します。
主な流れ:
⇒①javaコマンドでshellファイルを呼びだし、shellを実行させる。
⇒②shellが指示された画像ファイルを目標サーバーに転送を実行する。
⇒③java側でshellの実行結果を取得し、プリントアウトする。
ImageRemoteTransmit.java サーバー間に画像転送のjavaコード
package ImageRemoteTransmit;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.LineNumberReader;
import java.util.ArrayList;
import java.util.List;
/**
* サーバー間に画像ファイルを転送する。
*
*/
public class ImageRemoteTransmit {
/**
* @param args
* @throws IOException
* @throws InterruptedException
*/
public static void main(String[] args) throws IOException,
InterruptedException {
// 返し結果リスト
List<String> rtStrs = new ArrayList<String>();
String shellPath = "/your-shell-file-path/imageTransmit.sh";//shellファイル
String localImgpath = "/images-what-you-want-to-transmit/img-folder";//転送元の画像フォルダー、または転送する画像
String ip = "remote-server-ip";//転送先のHostName(ipでもOK)
String copyToImgPath = "/remote-server-image-folder";//転送先のフォルダーPATH
// コマンド
String command = "/bin/sh " + shellPath + " " + localImgpath + " " + ip
+ " " + copyToImgPath;
// Shellコマンドを実行
Process ps = Runtime.getRuntime().exec(command);
ps.waitFor();
// 実施結果をGET
InputStreamReader isr = new InputStreamReader(ps.getInputStream());
//
LineNumberReader lnr = new LineNumberReader(isr);
String line;
ps.waitFor();
while ((line = lnr.readLine()) != null) {
rtStrs.add(line);
}
for (String lineMsg : rtStrs) {
System.out.println("====" + lineMsg + "====");
}
}
}
ポイント:Process ps = Runtime.getRuntime().exec(command);
imageTransmit.sh 画像ファイル転送するのshell
#!/bin/sh
##コピー元のファイルまたはフォルダー
copy_from=$1
##コピー先のサーバ
remote_host=$2
##コピー先のサーバーでのPATH
copy_to =$3
##ログイン用ユーザ
user=login_user
##パスワード
passwd=loginPassword
##shellのフォルダーに移動
cd /home/pjuser/java_call_sh/
# expect コマンドを実行
expect -c "
# タイムアウト値の指定
set timeout 60
#コピーを実施
spawn scp -rp copy_from user@remote_host:/copy_to
expect {
\"*assword\" {set timeout 60; send \"$passwd\r\";}
\"*パスワード\" {set timeout 60; send \"$passwd\r\";}
\"yes/no\" {send \"yes\r\"; exp_continue;}
}
expect eof"
ポイント:違うサーバの間にファイル転送なので、転送先サーバからのユーザ認証が普通に必要となると思う。上記はログインユーザとパスワードが求められたときに、パスワードを自動入力させる。
♪ 当記事がお役に立ちましたらシェアして頂ければ嬉しいです。
★ 当記事を閲覧の方は下記の【関連記事】も閲覧していました。
zanmai @2016年03月31日
» ①②③④の順で設定できるはず。…