データベースに格納されているStreamデータをファイルに出力する方法
これは、InterSystems FAQサイトの記事です。
以下の例では Test.Class2 クラスの Images プロパティに画像ファイルが保存できるように定義しています。
input() メソッドを利用して画像ファイルを Images プロパティに登録し、データベースに保存したとします。
Class Test.Class2 Extends %Persistent { Property Images As %Stream.GlobalBinary; ///引数には画像ファイルのフルパスを指定 ClassMethod input(in As %String) As %Status { //画像ファイル格納用ストリームのインスタンスを用意 set filestream=##class(%Stream.FileBinary).%New() //画像ファイルをストリームのインスタンスにリンクさせる do filestream.LinkToFile(in) //Test.Class2クラスのインスタンス生成 set o=..%New() //画像のストリームをTest.Class2のインスタンスにコピー do o.Images.CopyFrom(filestream) //インスタンスをデータベースに保存 quit o.%Save() } /// 以下Storage定義は省略 }
データベース登録されたストリームデータを画像ファイルに出力するコード例は以下の通りです(ID=1で格納されたデータをオープンしています)。
set file="/ISC/test.JPG" set filestream=##class(%Stream.FileBinary).%New() do filestream.LinkToFile(file) set obj=##class(Test.Class2).%OpenId(1) //保存済オブジェクトのオープン do filestream.CopyFrom(obj.Images) set st=filestream.%Save()