今回はFTPのアップロード処理について説明します。
改造したInDesign CS3ではファイルをダウンロードするだけでなくアップロードすることもできます。サーバーへのアクセス方法はget()を使ってダウンロードする場合と全く同じです。異なるのはアップロードする命令です。アップロードする場合はput()を使います。最初のパラメータにアップロードしたいファイルオブジェクトを指定します。ファイル名ではない点には注意してください。2番目のパラメータにはサーバーにアップロードした際に付けるファイル名になります。
put()は正しくファイルがアップロードされるとtrue、アップロードに失敗した場合はfalseを返します。これによりエラーメッセージを表示したり処理を継続するかどうか判断することができます。
サンプルではファイル選択ダイアログで指定されたファイルをサーバーにアップロードします。同期通信のためファイルサイズが大きいと完全に転送が終わるまで次の処理が行われないので注意してください。大量のファイルをアップロードする場合やサイズの大きいファイルをアップロードする場合は、同期通信でなく非同期通信を使って処理する方が好ましい場合もあります。同期通信と非同期通信の切り替えはFTPオブジェクトのasyncまたはsyncプロパティで指定することができます(詳しくはJavaScript Tools Guideを参照してください)。
ファイル転送の際にバイナリモードとアスキーモードの指定を行うこともできます。特に指定しない場合はバイナリモードになっています。バイナリモード、アスキーモードの設定はFTPオブジェクトのbinary、asciiプロパティで設定することができます。binaryプロパティにtrueを設定すると自動的にasciiプロパティはfalseに設定されます。
// 選択したファイルをFTPサーバーにアップロードする
var uploadFile = File.openDialog("アップロードするPDFファイルを指定してください");
var uploadFilename = uploadFile.name; // ファイル名だけを抜き出す
putFtpData("ftp://www.openspc2.org","adobe","indesign", uploadFile, uploadFilename);
// FTPを使って指定されたサーバーファイルをアップロードする
function putFtpData(sURL, userName, password, fileObj, file){
if ( !ExternalObject.webaccesslib ) {
ExternalObject.webaccesslib = new ExternalObject("lib:webaccesslib");
}
var ftp = new FtpConnection(sURL);
ftp.username = userName;
ftp.password = password;
ftp.ftpDir = "./";
var flag = ftp.put(fileObj, file);
if (flag== false){
alert("アップロードできませんでした");
}
ftp.close();
}