Base64文字列でクラスに画像を保存・復元する方法
これは InterSystems FAQ サイト の記事です。
以下のサンプルでは、画像ファイルをクラスプロパティにBase64文字列にエンコードして保存し、再びそれをBase64でデコードし、別のファイルに復元しています。
【使用クラス】
Class User.test Extends %Persistent
{
Property pics As %GlobalBinaryStream;
}
【取込み時】
set x=##class(User.test).%New() // ここに保存
// 画像準備
set file=##class(%File).%New("c:\temp\Mii.png")
do file.Open("RUK\BIN\")
for {
if file.AtEnd=1 quit
// 画像を1024 byteずつ Base64形式に変換(エンコード)
set cnt=file.Read(1024)
set b64=$system.Encryption.Base64Encode(cnt) // b64: 1402byte
do x.pics.Write(b64)
}
do x.%Save()
do file.Close()
【上記クラスに保存したBase64から画像復元】
// 復元先ファイル set file2=##class(%FileBinaryStream).%New() do file2.LinkToFile("C:\temp\xx.png") // User.test クラス保存したデータをオープン set x=##class(User.test).%OpenId(1) for { if x.pics.AtEnd=1 quit set b64=x.pics.Read(1402) set cnt=$system.Encryption.Base64Decode(b64) do file2.Write(cnt) } do file2.SaveStream()