データベースに格納されている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()
ディスカッション (0)1