有业务需求把图片存起来,又不能让人随意看到,不能存成图片文件,就用方法转成base64位字符,可以直接显示在界面上,也可存入数据库,
/// 把图片转成base64
ClassMethod Img2Base64(path)
{
set img = ##class(%FileBinaryStream).%New()
set img.Filename = $g(path)
set byteList = img.Read(12288) ;要为3的倍数,这样补0才不会出问题. 12288 =3*4*1024,12k
set count=0
while(byteList'=""){
w ##class(%SYSTEM.Encryption).Base64Encode(byteList)
s count=count+1
set byteList = ""
set byteList = img.Read(12288) // 读字节流,再通过系统方法把字节转成Base64字符串
}
do img.%Close()
set img=""
q ""
}
新建一img2basetest.csp代码如下:
<html>
<head>
<title> img 2 base64 test </title>
</head>
<body>
<script language=cache runat=server>
w "<img src=""data:image/gif;base64,"
d ##class(web.Test).Img2Base64("d:snchangeback.png")
w """/>",!
</script></body>
</html>
访问csp界面http://localhost/xxxxxxxxxx/csp/img2basetest.csp,即可看到图片效果。
图片转成base64字符串后, 所占内存比以前还要大,3个字节变4个字节。
如果存到数据库,还是很占空间。