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

 
 Ex:Ftp.Uploadコマンド
Macro Top | Variables | Constants | Commands | Ex-Commands  


 

書式


  Ex:Ftp.Upload: (Parameters)  

パラメータ :
server= : FTPサーバ(接続先)
user= : ログインユーザ名
passw= : ログインパスワード
enc= : エンコード(charset) (optional)
sizeCheck= : サイズチェック (yes -or- no, optional)
O:result= : FTP結果 (optional)
no-pasv : passiveモードを使用しないときに指定 (optional)

【ディレクトリ確認オプション】
rDir= : 確認するサーバ上のディレクトリ(無い場合は作成)
rDir.Base= : 確認するディレクトリの基部 (optional)
O:rDir.NLST= : ファイル一覧の取得 (optional)

【単独ファイルアップロード】
dir= : アップロードするファイルのフォルダ (optional)
file= : アップロードするファイル
rName= : アップロードするファイルのサーバでの名前

【フォルダ内ファイルの一斉アップロード】
files.Dir= : string, アップロードファイルのフォルダ
files.Key= : string, ワイルドカード(アップロードファイルの選択) (optional)
files.RemoteDir= : string, アップロード先(サーバのディレクトリ)
files.AbortOnError= : int, 中断するエラー数閾値(1なら1件のアップロードエラーで中断) (optional)
files.MaxSize= : int, アップロードする最大サイズ(5000なら5000バイトより大きいファイルは対象外) (optional)
files.target.No= : string, アップロード対象外を正規表現で指定 (optional)
files.StoredFiles= : string, アップロードしたファイルを格納するHashTableの名前 (optional)

【ファイル削除オプション】
del.Name= : string, 削除するサーバ上のファイルのフルパス
Del.LocalDir= : string, ローカル側で削除するファイルがあるときのフォルダ (optional)

【結果格納オプション】 (optional)
okfiles.prefix= : string, アップロード成功ファイルの格納先プレフィクス
O:okfiles.count= : int, アップロード成功ファイル数
---
ngfiles.prefix= : string, アップロード失敗ファイルの格納先プレフィクス
O:ngfiles.count= : int, アップロード失敗ファイル数
---
skippedfiles.prefix= : string, アップロードをスキップされたファイルの格納先プレフィクス
O:skippedfiles.count= : int, アップロードをスキップされたファイル数


【Sample】
フォルダのファイルをFTPアップロードする

 

機能


FTPでファイルをアップロードします。
単独ファイルをアップロードするモードと、 フォルダ内にあるファイル全てをサーバのディレクトリ内にアップロードするモードがあります。

「ディレクトリ確認オプション」により、 ファイルをアップロードする直前に、指定したディレクトリの有無をチェックし、 存在しない場合に作成することができます。

結果は、 コマンドパラメータ O:result= で指定した文字列変数に設定されます。
正しく処理された場合は OK: の3文字で開始される文字列が設定され、 エラーがあった場合は NG: の3文字で開始される文字列が設定されます。

ログインユーザ名(user=)と、 ログインパスワード(passw=)の指定は、マクロファイルに直接記述するよりも、 Ex:InputFormコマンド などの活用をおすすめします。

Ex:Ftp.Uploadコマンドの流れは、 「1. ディレクトリ確認(作成)」 → 「2. ファイルアップロード」 → 「3. ファイル削除」 → 「4. ファイル一覧取得(NLST)」 です。

 

単独ファイルアップロード


このコマンドによるファイルのアップロードでは、 「単独ファイルアップロード」 および 「フォルダ内ファイルの一斉アップロード」 を使用することができます。
単独のファイルをアップロードする場合は、 「単独ファイルアップロード」 を使用します。

単独ファイルのアップロードでは、アップロードするファイルを dir=file= で指定します。
詳しくは dir= と file= のパラメータによるファイルの指定 を参照してください。

次の例は、PCの C:\Workフォルダ にある 画像001.jpg という名前の画像を、 サーバの /work/image ディレクトリ に image_001.jpg の名前でアップロードします。



この例では、 sizeCheck=yes のオプションが設定されているので、 アップロード後にサイズのチェックを行います。
(サーバによって正しく機能しない場合があります)

rName= の指定を省略した場合、サーバに接続した時点でのディレクトリにファイルを転送します。 ファイル名は、アップロード元のファイル名を引き継ぎます。
上記の例では、アップロード元のファイル名「画像001.jpg」に日本語が含まれている為、 rName= の指定を省略することはできません。 省略した場合、Ex:Ftp.Uploadコマンドはアップロードを行わず、 エラー内容を O:result= で指定された文字列変数に設定します。

上記の例では、サーバ上の /work/imageディレクトリ にファイルを転送します。 事前に、 /work/image のディレクトリ が無い場合はエラーになります。
このエラーを避けるには、 コマンドに rDir= のオプションを追加し、そこでアップロード先のディレクトリを指定します。
Ex:Ftp.Uploadコマンドは、 そのディレクトリの有無をチェックして、無い場合に作成します。 ファイルのアップロードはその後に行われます。
次に rDir= を使用する例を示します。



この例では /work/image のディレクトリを確認(無い場合は作成)してから、 画像ファイルをアップロードします。 /work のディレクトリが無い場合は、それを作成してから、/work/image のディレクトリを作成します。

ここで、/work のディレクトリより、 上階層(この場合はルートディレクトリ) に移動できない場合は、 rDir="/work/image" という指定はできません。
その場合は、 rDir.Base="/work" と rDir="/image" の2つに分けて指定します。

ログインした位置がユーザーのディレクトリになっているときは、 その位置からは上階層のディレクトリへは移動できないことが殆どです。 その場合は rDir.Base= に、ユーザーのディレクトリを指定します。
例えば、ログインすると /user/TestTest というディレクトリにつながり、そこからは 上階層(この場合は/userディレクトリ) に移動できない場合は、 rDir.Base="/user/TestTest" と指定します。
このような環境で、ファイルを /user/TestTest/myDocument/image/2009/test.txt に転送する際に、そのディレクトリも同時に生成したいときは、
  rDir.Base="/user/TestTest"
  rDir="/myDocument/image/2009"
  rName="/user/TestTest/myDocument/image/2009/test.txt"
というパラメータ指定を行うことになります。

このEx:Ftp.Uploadコマンドは、 FTPサーバにログインしたときに XPWDコマンド を送信し、 ログイン直後のディレクトリを取得します。 そのディレクトリを rDir.Base= に設定するときは、
  rDir.Base="(XPWD)"
と指定します。
例えば、ログインすると /user/TestTest というディレクトリにつながり、 そこからは上階層に移動できないときに、ファイルを
  /user/TestTest/myDocument/image/2009/test.txt
に転送する際に、そのディレクトリも同時に生成したいときは、
  rDir.Base="(XPWD)"
  rDir="/myDocument/image/2009"
  rName="(XPWD)/myDocument/image/2009/test.txt"
というパラメータ指定を行うことになります。

Ex:Ftp.Uploadコマンドの流れは、 「1. ディレクトリ確認(作成)」 → 「2. ファイルアップロード」 → 「3. ファイル削除」 → 「4. ファイル一覧取得(NLST)」 です。
ファイルアップロードの段階でエラーになった場合、次の ファイル削除、 ファイル一覧取得(NLST) は実行されず、エラーでコマンド終了します。

 

フォルダ内ファイルの一斉アップロード


このコマンドによるファイルのアップロードでは、 「単独ファイルアップロード」 および 「フォルダ内ファイルの一斉アップロード」 を使用することができます。
とあるローカルフォルダ内のファイルを全てアップロードする場合は、 「フォルダ内ファイルの一斉アップロード」 を使用します。

アップロードするファイルを格納するローカルフォルダは files.Dir= で指定します。
アップロード先のサーバ上のディレクトリは files.RemoteDir= で指定します。
files.RemoteDir= の指定では、文字列先頭を (XPWD) の6文字にすることによって、 ログインディレクトリを表現することができます。
例えば、FTPサーバにログイン時のディレクトリが /User/MyHome のとき、 /User/MyHome/sample/Images のディレクトリにファイルを転送したいならば、
  files.RemoteDir="(XPWD)/sample/Images"
と記述することができます。

アップロードするファイルは、 ワイルドカードなどによって選択が可能です。 ワイルドカードは files.Key= で指定します。
files.Key=の指定は省略できます。省略した場合は全ファイルが選択されます。

ワイルドカードで選択されたファイルから、正規表現で更に絞り込むことができます。
正規表現は files.target= で指定します。
files.Key= の指定を省略して、 files.target= の指定だけで アップロードするファイルを指定することもできます。

files.Key=files.target= でアップロード対象となっていても、ファイル名が files.target.No= で指定した正規表現に一致するものは 除外されます。
例えば xmlファイル だけをアップロードしないときは、 files.Key=files.target= の指定は省略し、
  files.target.No="\\.xml$"
だけを指定します。 xmlファイルとhtmlファイルをアップロードしないのなら、
  files.target.No="(\\.xml$)|(\\.html$)"
になります。

一定サイズ以上のファイルはアップロードしない場合は、 files.MaxSize= で指定します(バイト単位)。指定しない場合、サイズ制限はありません。

files.Key=files.target=files.target.No=files.MaxSize= のオプションだけでは アップロードしたいファイルを絞り込めないときは、 files.StoredFiles= で指定するHashTableに、あらかじめアップロードしないファイルを フルパスで設定しておきます。
詳しくは、 「フォルダのファイルをFTPアップロードする」 のサンプルを参照してください。

アップロード先でのファイル名は、元ファイルを引き継ぎます。
例えば、ローカルファイル
  C:\Work\test.txt
を、サーバ上の /user/Hello/Wrkディレクトリ にアップロードする場合、 サーバでのファイル名前は
  /user/Hello/Wrk/test.txt
になります。
ファイル名に日本語が含まれる場合、そのファイルはアップロードされません。

このように元ファイルの名前を引き継ぐのが原則ですが、 files.name.Replace=オプション を指定することによって、単純な置換でアップロード先でのファイル名を変更することができます。
例えば
  files.name.Replace="てすと→test"
という指定があるとき、ローカル側のファイル
  C:\Tmp\てすと001.txt
  C:\Tmp\てすと002.html
  C:\Tmp\てすとtest001てすと.txt
  C:\Tmp\てすと\てすと.doc
はそれぞれ、
  test001.txt
  test002.html
  testtest001test.txt
  test.doc
の名前でアップロードされます。
この置換は拡張子やパス部には適用されません。

Webホスティングサービスなど、サーバによっては ファイル名に禁止ワードを設定している場合があります。
例えば、t35.com では proxy という文字列をファイル名に含ませることはできません。 aaa_proxy.html といったファイル名をftpアップロードしようとすると 550エラー(550 Forbidden filename) になります。
また . を複数含むファイル名を許容しないサーバもあります。例えば、 freewebsites.com系のサーバでは aaa.1.jpg といったファイルはアップロードできません。 aaa1.jpg のような . を拡張子の前に1つだけ含むようなファイル名でなければなりません。


次の例は、PCの C:\Workフォルダ にある jpg画像を全て、 サーバの /work/image ディレクトリ にアップロードします。



上記の例では、サーバ上の /work/imageディレクトリ にファイルを転送します。 事前に、 /work/image のディレクトリ が無い場合はエラーになります。
このエラーを避けるには、 コマンドに rDir= のオプションを追加し、そこでアップロード先のディレクトリを指定します。
次に rDir= を使用する例を示します。



rDir= 及び rDir.Base= の指定に関する詳細は 「単独ファイルアップロード」 の項目の記述を参照してください。

アップロードに成功したローカルファイルのフルパスを、HashTableに格納することができます。
files.StoredFiles= で、HashTableのID(名前)を指定すると、そのHashTableに アップロードに成功したローカルファイルのフルパス が追加されます (そのIDのHashTableが存在しなかった場合は そのIDで新規にHashTableが作成されます)。
詳しくは 「フォルダのファイルをFTPアップロードする」 のサンプルを参照してください。
→ フォルダのファイルをFTPアップロードする

Ex:Ftp.Uploadコマンドの流れは、 「1. ディレクトリ確認(作成)」 → 「2. ファイルアップロード」 → 「3. ファイル削除」 → 「4. ファイル一覧取得(NLST)」 です。
ファイルアップロードの段階でエラーになった場合、次の ファイル削除、 ファイル一覧取得(NLST) は実行されず、エラーでコマンド終了します。

 

ファイル一覧取得(NLST)オプション


rDir= で指定したファイルの一覧を、 O:rDir.NLST= を指定することで取得することができます。
ファイルの一覧が取得されるのは、ファイルをアップロードした後になります。

次の例では、
  rDir.Base="/MyDir" rDir="/work/image"
が指定されているので、
  O:rDir.NLST=strl[99]
によって strl[99] に設定されるのは /MyDir/work/imageディレクトリ のファイル名一覧です。
file= で指定されたファイルのアップロード後に一覧が取得されるので、 strl[99] には
  /MyDir/work/image/image_001.jpg
の行も含まれます。



この例で strl[99] に設定されるのは、 改行(CR,LF の2バイト, \r\n で表記) で区切られたファイルのフルパスの羅列です。
各ファイル名に分離するには splitコマンド を使用するのが便利です。

このコマンドをNLSTによる一覧取得のみに使用することができます。
それには、 「単独ファイルアップロード」 のパラメータ指定(file=など)及び、 「フォルダ内ファイルの一斉アップロード」 のパラメータ指定(files.Dir=など)を省略するだけです (後述するファイル削除オプションも省略します)。
次に、ファイル名一覧の取得のみを目的に、Ex:Ftp.Uploadコマンドを使用する例を示します。



この例では、コマンドパラメータ O:rDir.NLST=strl[99] の指定により、サーバの /Photo/2009ディレクトリ にあるファイル名の一覧が strl[99] の文字列変数に設定されます。
その後で、 splitコマンド により、一覧を各ファイルに分離したものを、文字列変数 strl["list.0"] 以降に設定しています。
その際、コマンドパラメータ
  regex="^/Photo/2009/image*.jpg$"
の指定により、 /Photo/2009/image の文字列で開始される jpgファイルのみを抽出しています。

 

ファイル削除オプション


オプションの指定により、サーバ上のファイルを削除することができます。

削除するファイルは、 del.Dir= にディレクトリ、 del.Name= にファイル名を指定します。
例えば、サーバの /MyDir/work/misc/image01.jpg というファイルを削除する場合は、
  del.Dir="/MyDir/work/misc" del.Name="image01.jpg"
と指定します。

フルパスで指定する場合は del.Name= に指定します。 del.Dir=は指定しません。
(O:rDir.NLST= のオプションで取得したファイル名と同じ書式になります)

del.Name=に、 改行(CR,LF の2バイト, \r\n で表記) で区切って複数のファイルを指定することができます。
この場合、 del.Dir= の指定はできません。 del.Name=に、各ファイルをフルパスで記述します。

Ex:Ftp.Uploadコマンドでは、ファイルのアップロードを行わず、 ファイル削除オプションのみを使用することができます。
ダウンロードマクロでは、 Ex:Ftp.Deleteコマンド も用意されていますが、これは Ex:Ftp.Uploadコマンドと全く同じものです。
ファイルの削除であることがわかりやすいように、 削除だけが目的の場合はEx:Ftp.Deleteコマンドで記述します。
次の2行は、どちらも同じ機能です。



Ex:Ftp.Uploadコマンドの流れは、 「1. ディレクトリ確認(作成)」 → 「2. ファイルアップロード」 → 「3. ファイル削除」 → 「4. ファイル一覧取得(NLST)」 です。
ファイル削除の段階でエラーになった場合、次の ファイル一覧取得(NLST) は実行されず、エラーでコマンド終了します。

[BACK]
プロセルピナ