InDesign CS3でFTP, HTTP通信を行う (5)

今回はFTPの処理について説明します。

CS3でサポートされているのはftpだけでなくsftpも対応しています(こちらではセキュアな環境での動作は確認していません)。
FTPの前にHTTP同様以下のスクリプトを記述しておく必要があります。これがないとエラーとなり動作しません。これもHTTPの時と同様で最初に一度だけ実行すればよく、毎回チェックする必要はありません。

if ( !ExternalObject.webaccesslib ) {
ExternalObject.webaccesslib = new ExternalObject('lib:webaccesslib');
}

それではFTPでJPEG画像ファイルをダウンロードしてローカルのハードディスクに保存してみます。FTPサーバーにアクセスするにはサーバー名とユーザー名が必要になります。ここではサンプルとして以下のようにしてあります。

サーバー名:ftp://www.openspc2.org/
ユーザー名:adobe
パスワード:indesign

アクセスするディレクトリ(フォルダ)はユーザーのホームディレクトリとし、そこにsample.jpgファイルがあるものとします。
まず、アクセスするFTPサーバーを指定しFTP通信用のオブジェクトを作成する必要があります。これはnew FtpConnection()を使い、パラメータにアクセスするFTPサーバー名を指定します。例えばftp://www.openspc2.org/にアクセスするのであれば以下のように書きます。

ftp = new FtpConnection("ftp://www.openspc2.org/");

次にユーザー名を指定します。ユーザー名はnew FtpConnection()により作成されたFTPオブジェクトのusernameプロパティに設定します。パスワードも同様にFTPオブジェクトのpasswordプロパティに設定します。
アクセスするディレクトリを指定するにはFTPオブジェクトのftpDirにアクセスしたいディレクトリのパスを指定します。
この時点ではFTPサーバーにはアクセスしません。ファイルをダウンロードする時点でサーバーにアクセスを行います。
JPEGファイルをダウンロードするにはFTPオブジェクトのget()を使います。最初のパラメータにダウンロードするファイル名を指定します。sample.jpgであればftp.get("sample.jpg")とします。get()には、2番目のパラメータも指定する必要があります。2番目のパラメータはローカルのハードディスクに保存する時のファイルオブジェクトを指定します。ファイルオブジェクトはnew File()を使って作成することができます。new File()のパラメータに保存先のパスとファイル名を指定します。

無事にファイルがダウンロードされるとget()はtrueを返します。失敗した場合にはfalseを返すので、これによりエラーメッセージを表示する、処理を中断するといったことが可能になります。
ファイルをダウンロードしたらclose()を使ってサーバーとの通信を終了します。サンプル1が実際のプログラムになります。

ファイルがダウンロードされローカルのハードディスクに保存されれば、これまで通り指定したパスにある画像ファイルを読み込み配置することができます。サンプル2がFTPサーバーからダウンロードしたJPEGファイルをInDesign上に配置するものです。
この場合、ダウンロードしたファイルは不要なのでremove()を使ってファイルを削除します。画像をリンクする場合には、削除しないようにしてください。

サンプルではJPEG画像ファイルをダウンロードしていますが、テキストファイルやPDFでも同様に処理することが可能です。

// 画像ファイルをダウンロード
getFtpData("ftp://www.openspc2.org","adobe","indesign");

// FTPを使って指定されたサーバーのデータを読み込みファイルオブジェクトを返す
function getFtpData(sURL, userName, password){
if ( !ExternalObject.webaccesslib ) {
ExternalObject.webaccesslib = new ExternalObject("lib:webaccesslib");
}
var ftp = new FtpConnection(sURL);
ftp.username = userName;
ftp.password = password;
ftp.ftpDir = "./";
var file = new File("~/downloadSample.jpg");
var flag = ftp.get("~/sample.jpg",file);
if (flag == false){
alert("ファイルをダウンロードできませんでした");
}
file.close();
ftp.close();
return file;
}


●サンプル2

// FTPサーバーにある画像ファイルをダウンロードしてInDesign上に配置する
(function(){
var imgObj = app.activeDocument.textFrames.add();
imgObj.visibleBounds = ["2cm", "3cm", "10cm", "14cm"];
imgObj.contentType = ContentType.graphicType; // 画像タイプに設定
var fileObj = getFtpData("ftp://www.openspc2.org","adobe","indesign","./","./sample.jpg", "~/sample.jpg");
imgObj.place(fileObj);
imgObj.fit(FitOptions.fillProportionally);
fileObj.remove();
})();

// FTPを使って指定されたサーバーのデータを読み込みファイルオブジェクトを返す
function getFtpData(sURL, userName, password, dir, downloadFile, tempFile){
if ( !ExternalObject.webaccesslib ) {
ExternalObject.webaccesslib = new ExternalObject("lib:webaccesslib");
}
var ftp = new FtpConnection(sURL);
ftp.username = userName;
ftp.password = password;
ftp.ftpDir = dir;
tempFile = new File(tempFile);
var flag = ftp.get(downloadFile,tempFile);
if (flag == false){
alert("ファイルをダウンロードできませんでした");
}
ftp.close();
return tempFile;
}

 

[サンプルをダウンロード]