ホーム » ブログ » 違うサーバの間にファイルの転送
このエントリーをはてなブックマークに追加
@2014/07/28

スポンサーリンク
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"
ポイント:違うサーバの間にファイル転送なので、転送先サーバからのユーザ認証が普通に必要となると思う。上記はログインユーザとパスワードが求められたときに、パスワードを自動入力させる。

♪ 当記事がお役に立ちましたらシェアして頂ければ嬉しいです。
2人
このエントリーをはてなブックマークに追加


★ 当記事を閲覧の方は下記の【関連記事】も閲覧していました。

お名前:

 

EMAIL:

 

URL:

 

認証コード:

zanmai.net-safecode

 


※会員の方は認証コードを要らないから、新規登録をオススメ!

check