Caché インターネット・ユーティリティの使用法
FTP の使用法
[Home] [Back] [Next]
InterSystems: The power behind what matters   
Class Reference   
Search:    

Caché は、Caché 内から FTP サーバとのセッションを確立する際に使用できる %Net.FtpSession クラスを提供します。この章では、以下について説明します。

FTP セッションの確立
FTP セッションを確立する手順は次のとおりです。
  1. %Net.FtpSession のインスタンスを作成します。
  2. オプションで、セッションの一般的な動作を制御するために、このインスタンスのプロパティを設定します。
  3. 特定の FTP サーバに接続するには、Connect() メソッドを呼び出します。
  4. 転送モードを ASCII モードまたはバイナリ・モードに設定するには、それぞれ、Ascii() メソッドまたは Binary() メソッドを呼び出します。現在の転送モードを参照するには、インスタンスの Type プロパティの値を確認します。
Note:
%Net.FtpSession の各メソッドはステータスを返すので、それを確認する必要があります。これらのメソッドは、セッションの状態についての有益な情報を提供するプロパティの値も設定します。
Status() メソッドは、FTP サーバのステータスを (参照によって) 返します。
詳細は、%Net.FtpSession のクラス・ドキュメントを参照してください。
コマンド用のテーブルの変換
%Net.FtpSession は、FTP サーバでファイル名とパス名を検索するときに、RFC 2640 で説明されている手法を使用して、文字セットの変換を自動的に処理します。%Net.FtpSession のインスタンスは FTP サーバに接続するときに、FEAT メッセージを使用して、サーバが UTF-8 文字であるかどうかを判断します。UTF-8 の場合は、コマンド・チャネルの通信を UTF-8 に切り替えて、すべてのファイル名およびパス名の UTF-8 への変換と UTF-8 からの変換が適切に行われるようにします。
サーバが FEAT コマンドをサポートしていない場合や、UTF-8 のサポートを報告しない場合、%Net.FtpSession インスタンスは RAW モードを使用して未加工のバイトを読み取りまたは書き込みします。
特殊な状況では、使用する変換テーブルの指定が必要になることがあります。その場合は、%Net.FtpSession インスタンスの CommandTranslateTable プロパティを設定します。通常は、このプロパティを使用する必要はありません。
FTP ファイルおよびシステム・メソッド
FTP セッションを確立したら、セッション・インスタンスのメソッドを呼び出して、FTP タスクを実行します。%Net.FtpSession は、ファイルの読み取りおよび書き込みのための以下のメソッドを提供します。
Delete()
ファイルを削除します。
Retrieve()
ファイルを FTP サーバから Caché ストリームにコピーし、参照によってストリームを返します。このストリームを使用するには、標準ストリーム・メソッドである Write()WriteLine()Read()ReadLine()Rewind()MoveToEnd()、および Clear() を使用します。また、ストリームの Size プロパティも使用できます。
RetryRetrieve()
以前 Retrieve() を使用して作成されたストリームが指定されている場合には、続けてファイルを取得できます。
Store()
Caché ストリームのコンテンツを FTP サーバのファイルに書き込みます。
Append()
ストリームの内容を指定したファイルの最後に追加します。
Rename()
ファイルの名前を変更します。
さらに、%Net.FtpSession は、FTP サーバ上でファイル・システムをナビゲートおよび変更するためのメソッド、GetDirectory()SetDirectory()SetToParentDirectory()、および MakeDirectory() を提供します。
ファイル・システムのコンテンツを調べるには、List() メソッドまたは NameList() メソッドを使用します。
ChangeUser() メソッドを使用して、別のユーザに変更することもできます。この方が、ログアウトして、再びログインするよりも早いです。ログアウトするには、Logout() メソッドを使用します。
System() メソッドは、(参照によって) FTP サーバをホストしているコンピュータのタイプについての情報を返します。
詳細は、%Net.FtpSession のクラス・ドキュメントを参照してください。
リンクされたストリームの使用による大きなファイルのアップロード
大きなファイルをアップロードする場合、ストリーム・インタフェースの LinkToFile() メソッドを使用することを検討してください。つまり、ストリームを作成してファイルをその中に読み込む代わりに、ストリームを作成してそれをファイルにリンクします。%Net.FtpSessionStore() メソッドを呼び出すときに、このリンクされたストリームを使用します。
以下はその例です。
Method SendLargeFile(ftp As %Net.FtpSession, dir As %String, filename As %String)
{
    Set filestream=##class(%FileBinaryStream).%New()
    Set sc=filestream.LinkToFile(dir_filename)
    If $$$ISERR(sc) {do $System.Status.DisplayError(sc) quit }
    
    //Uploaded file will have same name as the original
    Set newname=filename

    Set sc=ftp.Store(newname,filestream)
    If $$$ISERR(sc) {do $System.Status.DisplayError(sc) quit }
}
FTP サーバが発行するコールバックのカスタマイズ
FTP サーバによって生成されたコールバックをカスタマイズできます。そうすることによって、例えば、ユーザにサーバがまだ大きな転送を行っていることを示したり、ユーザが転送を中止できるようにすることができます。
FTP コールバックをカスタマイズするには、以下の手順を実行します。
  1. %Net.FtpCallback のサブクラスを作成します。
  2. このサブクラスで、RetrieveCallback() メソッドを実装します。このメソッドは、FTP サーバからデータを受信するときに定期的に呼び出されます。
  3. StoreCallback() メソッドも実装します。このメソッドは、FTP サーバにデータを書き込むときに定期的に呼び出されます。
  4. FTP セッションの確立 で説明されているとおり FTP セッションを作成したら、%Net.FtpCallback のサブクラスと等しくなるように Callback プロパティを設定します。
詳細は、%Net.FtpCallback のクラス・ドキュメントを参照してください。