記事
Mihoko Iijima · 2020年12月1日 2m read

データベースに格納されているStreamデータをファイルに出力する方法

これは、InterSystems FAQサイトの記事です。

以下の例では Test.Class2 クラスの Images プロパティに画像ファイルが保存できるように定義しています。
input() メソッドを利用して画像ファイルを Images プロパティに登録し、データベースに保存したとします。

Class Test.Class2 Extends %Persistent
{

Property Images As %Stream.GlobalBinary;

///引数には画像ファイルのフルパスを指定
ClassMethod input(in As %StringAs %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()
00
1 0 0 41
Log in or sign up to continue