プロセルピナ
Top Internet
Mail
Private
Proxy
Capture
Device
Download Config
and
Words
Online
Help
Online
Home
[BACK]
Top > FileDownload > Macro > Ex: Command > Ftp.Upload

 

 フォルダのファイルをFTPアップロードする
 (Ex:Ftp.Uploadコマンド)
Macro Top | Variables | Constants | Commands | Ex-Commands  


 

書式


Ex:Ftp.Uploadコマンド

Ex:Ftp.Listコマンド

 

アップロードのサンプル


次の例は、FTPサーバ「ftp.example.com」に「ftp_user」のユーザーでログインし、 「C:\work\upload」のフォルダにあるファイルを全てアップロードするものです。



【サンプルの説明】
Ex:Ftp.Uploadコマンドでアップロードする前に、 Ex:Ftp.Listコマンド を実行していますが、ここではファイル一覧の取得が目的ではなく、 O:Xpwd=パラメータで取得できるXPWDコマンドの応答を得るのが目的です。 この応答が OK: の3文字で開始されなかった場合は、エラーと判断してそこでマクロを終了します。

file listコマンドで、 アップロードするファイルが格納されているフォルダのファイルを数えます。 hashTable.id=パラメータにより、idが Local のHashテーブルにファイル一覧が設定されるので、その登録個数を HashTable.Containsコマンドで取得し、 putコマンドにより結果出力しています。

次にEx:Ftp.Uploadコマンドでファイルをアップロードしますが、ここでコマンドパラメータ files.AbortOnError=1 を指定しています。
これは、アップロード中にエラーが1件でも発生するとコマンドを中断し、 O:result= で指定した変数 strl[10] に NG: で開始される文字列が設定されることを意味します。
このEx:Ftp.Uploadコマンドは(whileループにより)最大で16回繰り返されますが、 全てのアップロードが成功した時点(strl[10]に OK: で開始される文字列が設定される)で ループを抜けます。 つまり、アップロード途中でのエラー発生は16回まで許容されます。

この例のEx:Ftp.Uploadコマンドでは、
  files.StoredFiles="UP済"
が指定されています。 これは、idが UP済 のHashテーブルに登録されているファイルは、アップロードしないことを意味します。 同時に、アップロードが成功したファイルは、idが UP済 のHashテーブルに登録されることを意味します。 このパラメータを使用することにより、whileループ内でEx:Ftp.Uploadコマンドを使用しても、 既にアップロードが完了したファイルは再度アップロードしないようにすることができます。
例えば上記例のようなwhileループでアップロードする場合において、 a.jpg、b.jpg、c.jpg、d.jpg の4ファイルが Ex:Ftp.Uploadコマンドの files.Dir=で指定するフォルダにあったとします。 Ex:Ftp.Uploadコマンドが、 a.jpg、b.jpg のアップロードに成功し、c.jpg のアップロードで失敗したとします。 O:result=で指定した変数には NG: で開始される文字列が設定されるのでwhileループは抜けず、 再度、Ex:Ftp.Uploadコマンドが実行されますが、このとき、idが UP済 のHashテーブルには a.jpg、b.jpg のファイルが登録されているので、アップロードは c.jpg と d.jpg のみを対象に行われます。

 

アップロードのサンプル2


次の例は上記のサンプルに若干の変更を加えたものです。
「C:\work\upload」フォルダにあるファイルを サーバの「接続時のディレクトリ」にアップロードするのは同じですが、 最初に、サーバのファイル一覧とそのファイルサイズを取得し、Hashテーブル(id="一覧")に格納します。 次にローカルフォルダのファイル一覧とそのファイルサイズを取得し、別のHashテーブル(id="Local")に格納します。 この2つのHashテーブルを比較して、ファイル名とファイルサイズが同じものを抽出し、 それをまた別のHashテーブル(id="UP済")に格納します。 id="UP済" のHashテーブルを、Ex:Ftp.Uploadコマンドのfiles.StoredFiles=に指定することにより、 「サイズが一致するファイルはアップロードしない (最初からアップロード対象外にする)」 という処理にすることができます。



サーバ側のファイル一覧は Ex:Ftp.Listコマンドで、 ローカルフォルダ側の一覧は file listコマンド で取得します。
どちらのコマンドにも hashTable.shortNameオプション を使用して、パス部分を含めないファイル名で取得します。

Ex:Ftp.Listコマンドで、 hashTable.shortNameオプション が指定されている場合、Hashテーブルのkeyは パス部分が含まれないファイル名です。 サーバの /user/Yourname/aaa.jpg というファイルは、aaa.jpg として取得されます。
file listコマンドで、 hashTable.shortNameオプション が指定されている場合、Hashテーブルのkeyは パス部分が含まれないファイル名です。 C:\work\upload\aaa.jpg というファイルは、aaa.jpg として取得されます。

HashTable.RemoveSameコマンドは、 2つのHashテーブルを比較し、 key(ここではファイル名) と value(ここではファイルサイズ) の両方が一致するものを id.removed=で指定したHashテーブルにコピーし、元の2つのHashテーブルからは削除します。
上記例ではidが "一致" というHashテーブルに、一致したものがコピーされています。
"一致" のHashテーブルのkeyは、 パス部が含まれないファイル名(aaa.jpg など) なので、これをそのままEx:Ftp.Uploadコマンドのfiles.StoredFiles=に使用することはできません (files.StoredFiles=に指定するには、Hashテーブルのkeyがファイルのフルパスでなければなりません)。
そこでHashTable.Copyコマンドを使用します。 このコマンドはHashテーブルをコピーする際に、 keyの文字列にプレフィクスをつけることができます。プレフィクスにパス部分(末尾は\記号)を指定してコピーすれば、 フルパスのkeyを持つHashテーブルを作成することができます。

Ex:Ftp.Uploadコマンドのfiles.StoredFiles=で指定するHashテーブルは、keyのみ参照されます。 valueに登録されている値(ここではファイルサイズ)は参照されません。

 

アップロードのサンプル3


次の例は上記のサンプルを更に拡張し、文字列変数 str["Upフォルダ"] に指定したローカルフォルダと、その配下にある imgフォルダ と img2フォルダ をサーバにアップロードするものです。
imgフォルダ と img2フォルダのアップロードはgosubコマンドにより サブルーチン UploadSub の呼び出しで処理しています。
  gosub: UploadSub("img")
  gosub: UploadSub("img2")
サブルーチンをcallするときのパラメータは サーバ側のディレクトリ名であり、かつ、ローカル側のサブフォルダ名です。 サブフォルダ内のローカルファイルは、同じ名前の サーバ側ディレクトリ の中にアップロードされます (該当ディレクトリが存在しない場合は作成)

例えば、ローカル側フォルダ str["Upフォルダ"] に C:\work\upload を指定した場合、 「C:\work\upload」のフォルダにあるファイルは、サーバの /ディレクトリ(ftp接続時に/でアクセスできるディレクトリ) にアップロードされ、
  gosub: UploadSub("img")
により、 「C:\work\upload\img」のフォルダにあるファイルは、サーバの /imgディレクトリ にアップロードされます。
同じように、
  gosub: UploadSub("img2")
により、 「C:\work\upload\img2」のフォルダにあるファイルは、サーバの /img2ディレクトリ にアップロードされます。



UploadSubサブルーチン内の、 Ex:Ftp.Uploadコマンドのfiles.RemoteDir=パラメータでは アップロード先のディレクトリを指定しています。 そのディレクトリがなかった場合に作成するように rDir=パラメータで同じディレクトリを指定しています。
rDir=パラメータだけの指定では / でアクセスできるディレクトリに アップロードされてしまうことに注意してください。

[BACK]
プロセルピナ