FTP の使用法
InterSystems IRIS は、InterSystems IRIS 内から FTP サーバとのセッションを確立する際に使用できる %Net.FtpSessionOpens in a new tab クラスを提供します。
FTP セッションの確立
FTP セッションを確立する手順は次のとおりです。
-
%Net.FtpSessionOpens in a new tab のインスタンスを作成します。
-
オプションで、セッションの一般的な動作を制御するために、このインスタンスのプロパティを設定します。
-
Timeout は、FTP サーバからの応答を待機する時間を秒単位で指定します。
-
SSLConfiguration は、接続に使用する有効化された SSL/TLS 構成を指定します (存在する場合)。FTP サーバが https を使用する場合にこれを使用します。
SSL/TLS 構成の作成と管理の詳細は、インターシステムズの "TLS ガイド" を参照してください。SSL/TLS 構成には、[構成名] と呼ばれるオプションが含まれています。これは、この設定で使用する文字列です。
-
TranslateTable は、ファイルの内容の読み取りまたは書き込みの際に使用する変換テーブルを指定します。
指定した文字セットのテーブル名を検索するには %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 に設定します。
-
SSLUseSessionResumption は、true の場合、データ・チャンネルの SSL 接続を作成するときに、セッション・パラメータをコマンド・チャンネルから再利用するよう指定します。この機能には OpenSSL v1.1.x 以降が必要です。OpenSSL v1.0.x を使用しているインスタンスにこのフラグを設定した場合、無視されます。
-
特定の FTP サーバに接続するには、Connect() メソッドを呼び出します。
-
転送モードを 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 のクラス・ドキュメントを参照してください。
FTP ファイルおよびシステム・メソッド
FTP セッションを確立したら、セッション・インスタンスのメソッドを呼び出して、FTP タスクを実行します。%Net.FtpSessionOpens in a new tab は、ファイルの読み取りおよび書き込みのための以下のメソッドを提供します。
Retrieve()
ファイルを FTP サーバから InterSystems IRIS ストリームにコピーし、参照によってストリームを返します。このストリームを使用するには、標準ストリーム・メソッドである Write()、WriteLine()、Read()、ReadLine()、Rewind()、MoveToEnd()、および Clear() を使用します。また、ストリームの Size プロパティも使用できます。
RetryRetrieve()
以前 Retrieve() を使用して作成されたストリームが指定されている場合には、続けてファイルを取得できます。
Store()
InterSystems IRIS ストリームのコンテンツを FTP サーバのファイルに書き込みます。
StoreFiles()
ローカル・ディレクトリとワイルドカード・マスクを指定すると、このメソッドによってそのディレクトリに複数のファイルが書き込まれます。このメソッドではディレクトリが無視され、現在の転送モード (バイナリまたは ASCII) が使用されます。つまり、バイナリ・ファイルと ASCII ファイルを 1 回の呼び出しで同時にアップロードすることはできません。
Append()
ストリームの内容を指定したファイルの最後に追加します。
さらに、%Net.FtpSessionOpens in a new tab は、FTP サーバ上でファイル・システムをナビゲートおよび変更するためのメソッド、GetDirectory()、SetDirectory()、SetToParentDirectory()、および MakeDirectory() を提供します。
ファイル・システムのコンテンツを調べるには、List() メソッドまたは NameList() メソッドを使用します。
ChangeUser() メソッドを使用して、別のユーザに変更することもできます。この方が、ログアウトして、再びログインするよりも早いです。ログアウトするには、Logout() メソッドを使用します。
System() メソッドは、(参照によって) FTP サーバをホストしているコンピュータのタイプについての情報を返します。
Size() および MDTM() メソッドは、ファイルのサイズとファイルの変更日時をそれぞれ返します。
FTP サーバにコマンドを送信して、応答を読み取るには、汎用メソッド sendCommand() を使用します。このメソッドは、%Net.FtpSessionOpens in a new tab で明示的にはサポートされていないコマンドの送信に使用される場合があります。
詳細は、%Net.FtpSessionOpens in a new tab のクラス・ドキュメントを参照してください。
リンクされたストリームの使用による大きなファイルのアップロード
大きなファイルをアップロードする場合、ストリーム・インタフェースの LinkToFile() メソッドを使用することを検討してください。つまり、ストリームを作成してファイルをその中に読み込む代わりに、ストリームを作成してそれをファイルにリンクします。%Net.FtpSessionOpens in a new tab の Store() メソッドを呼び出すときに、このリンクされたストリームを使用します。
以下はその例です。
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 コールバックをカスタマイズするには、以下の手順を実行します。
-
%Net.FtpCallbackOpens in a new tab のサブクラスを作成します。
-
このサブクラスで、RetrieveCallback() メソッドを実装します。このメソッドは、FTP サーバからデータを受信するときに定期的に呼び出されます。
-
StoreCallback() メソッドも実装します。このメソッドは、FTP サーバにデータを書き込むときに定期的に呼び出されます。
-
“FTP セッションの確立” で説明されているとおり FTP セッションを作成したら、%Net.FtpCallbackOpens in a new tab のサブクラスと等しくなるように Callback プロパティを設定します。
詳細は、%Net.FtpCallbackOpens in a new tab のクラス・ドキュメントを参照してください。