在SQL Server存储二进制图片,Laravel中如何在img标签显示?
解决SQL Server varbinary(max)图片在Laravel中显示的问题
首先可以优化你的存储代码(更简洁可靠):
不需要把图片转成十六进制字符串再通过CONVERT存储,直接存入二进制数据即可:
$img = file_get_contents($request->file('image')->getRealPath()); $data->user_pic = $img; $data->save();
正确的图片显示方法
你之前的显示代码错误使用了CRC32(这是生成校验码的函数,和图片原始数据无关),正确做法是直接对数据库取出的二进制图片数据做base64编码:
在Blade模板中可以这样写:
@if($user->user_pic) <img src="data:image/png;base64,{{ base64_encode($user->user_pic) }}" alt="User Picture"> @endif
原代码无效的原因
你用CRC32($user->user_pic)生成的是图片数据的校验值,并非图片本身的内容,后续的pack和base64编码自然无法还原出可显示的图片。直接对原始二进制数据做base64编码,就能得到正确的data URI。
如果图片格式不固定(比如可能是JPG、PNG等),建议存储时额外保存图片的MIME类型,显示时将image/png替换为对应的类型,兼容性会更好。
内容的提问来源于stack exchange,提问作者Mohammed
相关产品推荐
相关产品推荐

