Skip to main content

This is documentation for Caché & Ensemble. See the InterSystems IRIS version of this content.Opens in a new tab

For information on migrating to InterSystems IRISOpens in a new tab, see Why Migrate to InterSystems IRIS?

FTP の使用法

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

FTP セッションの確立

FTP セッションを確立する手順は次のとおりです。

  1. %Net.FtpSessionOpens in a new tab のインスタンスを作成します。

  2. オプションで、セッションの一般的な動作を制御するために、このインスタンスのプロパティを設定します。

    • Timeout は、FTP サーバからの応答を待機する時間を秒単位で指定します。

    • SSLConfiguration は、接続に使用する有効化された SSL/TLS 構成を指定します (存在する場合)。FTP サーバが https を使用する場合にこれを使用します。

      SSL/TLS 構成の作成と管理の詳細は、"Caché セキュリティ管理ガイド" の “Caché での SSL/TLS の使用法” を参照してください。SSL/TLS 構成には、[構成名] と呼ばれるオプションが含まれています。これは、この設定で使用する文字列です。

    • TranslateTable は、ファイルの内容の読み取りまたは書き込みの際に使用する変換テーブルを指定します。

      指定された文字セットのテーブル名を検索するには、“その他の %Net ツール” で説明されている %Net.CharsetOpens in a new tab クラスを使用します。

    • UsePASV は、PASV モードを有効化します。

    • SSLCheckServerIdentity は、FTP サーバが https を使用する場合に適用されます。既定では、%Net.FtpSessionOpens in a new tab のインスタンスは、SSL/TLS サーバに接続するときに、証明書サーバ名と、そのサーバへの接続に使用した DNS 名が一致しているかどうかを確認します。これらの名前が一致していないと、接続は許可されません。この既定の動作は、“中間者” 攻撃を防止するもので、RFC 2818Opens in a new tab のセクション 3.1 に説明があります。また、RFC 2595Opens in a new tab のセクション 2.4 も参照してください。

      この確認を無効にするには、SSLCheckServerIdentity プロパティを 0 に設定します。

  3. 特定の FTP サーバに接続するには、Connect() メソッドを呼び出します。

  4. 転送モードを ASCII モードまたはバイナリ・モードに設定するには、それぞれ、Ascii() メソッドまたは Binary() メソッドを呼び出します。現在の転送モードを参照するには、インスタンスの Type プロパティの値を確認します。

Note:

%Net.FtpSessionOpens in a new tab の各メソッドはステータスを返すので、それを確認する必要があります。これらのメソッドは、セッションの状態についての有益な情報を提供するプロパティの値も設定します。

  • Connected は、現在接続されている場合は True、接続されていない場合は False です。

  • ReturnCode には、前回の FTP サーバとの通信からの返りコードが含まれています。

  • ReturnMessage には、前回の FTP サーバとの通信からの返りメッセージが含まれています。

Status() メソッドは、FTP サーバのステータスを (参照によって) 返します。

詳細は、%Net.FtpSessionOpens in a new tab のクラス・ドキュメントを参照してください。

コマンド用のテーブルの変換

%Net.FtpSessionOpens in a new tab は、FTP サーバでファイル名とパス名を検索するときに、RFC 2640Opens in a new tab で説明されている手法を使用して、文字セットの変換を自動的に処理します。%Net.FtpSessionOpens in a new tab のインスタンスは FTP サーバに接続するときに、FEAT メッセージを使用して、サーバが UTF-8 文字であるかどうかを判断します。UTF-8 の場合は、コマンド・チャネルの通信を UTF-8 に切り替えて、すべてのファイル名およびパス名の UTF-8 への変換と UTF-8 からの変換が適切に行われるようにします。

サーバが FEAT コマンドをサポートしていない場合や、UTF-8 のサポートを報告しない場合、%Net.FtpSessionOpens in a new tab インスタンスは RAW モードを使用して未加工のバイトを読み取りまたは書き込みします。

特殊な状況では、使用する変換テーブルの指定が必要になることがあります。その場合は、%Net.FtpSessionOpens in a new tab インスタンスの CommandTranslateTable プロパティを設定します。通常は、このプロパティを使用する必要はありません。

FTP ファイルおよびシステム・メソッド

FTP セッションを確立したら、セッション・インスタンスのメソッドを呼び出して、FTP タスクを実行します。%Net.FtpSessionOpens in a new tab は、ファイルの読み取りおよび書き込みのための以下のメソッドを提供します。

Delete()

ファイルを削除します。

Retrieve()

ファイルを FTP サーバから Caché ストリームにコピーし、参照によってストリームを返します。このストリームを使用するには、標準ストリーム・メソッドである Write()WriteLine()Read()ReadLine()Rewind()MoveToEnd()、および Clear() を使用します。また、ストリームの Size プロパティも使用できます。

RetryRetrieve()

以前 Retrieve() を使用して作成されたストリームが指定されている場合には、続けてファイルを取得できます。

Store()

Caché ストリームのコンテンツを FTP サーバのファイルに書き込みます。

Append()

ストリームの内容を指定したファイルの最後に追加します。

Rename()

ファイルの名前を変更します。

さらに、%Net.FtpSessionOpens in a new tab は、FTP サーバ上でファイル・システムをナビゲートおよび変更するためのメソッド、GetDirectory()SetDirectory()SetToParentDirectory()、および MakeDirectory() を提供します。

ファイル・システムのコンテンツを調べるには、List() メソッドまたは NameList() メソッドを使用します。

  • List() は、名前が指定されたパターンと一致するすべてのファイルのリストを含むストリームを作成し、このストリームを参照によって返します。

  • NameList() は、ファイル名の配列を作成し、この配列を参照によって返します。

ChangeUser() メソッドを使用して、別のユーザに変更することもできます。この方が、ログアウトして、再びログインするよりも早いです。ログアウトするには、Logout() メソッドを使用します。

System() メソッドは、(参照によって) FTP サーバをホストしているコンピュータのタイプについての情報を返します。

詳細は、%Net.FtpSessionOpens in a new tab のクラス・ドキュメントを参照してください。

リンクされたストリームの使用による大きなファイルのアップロード

大きなファイルをアップロードする場合、ストリーム・インタフェースの LinkToFile() メソッドを使用することを検討してください。つまり、ストリームを作成してファイルをその中に読み込む代わりに、ストリームを作成してそれをファイルにリンクします。%Net.FtpSessionOpens in a new tabStore() メソッドを呼び出すときに、このリンクされたストリームを使用します。

以下はその例です。

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.FtpCallbackOpens in a new tab のサブクラスを作成します。

  2. このサブクラスで、RetrieveCallback() メソッドを実装します。このメソッドは、FTP サーバからデータを受信するときに定期的に呼び出されます。

  3. StoreCallback() メソッドも実装します。このメソッドは、FTP サーバにデータを書き込むときに定期的に呼び出されます。

  4. FTP セッションの確立” で説明されているとおり FTP セッションを作成したら、%Net.FtpCallbackOpens in a new tab のサブクラスと等しくなるように Callback プロパティを設定します。

詳細は、%Net.FtpCallbackOpens in a new tab のクラス・ドキュメントを参照してください。

FeedbackOpens in a new tab