You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在页面显示Base64编码数据?解码后图片无法显示求助

问题:Base64解码图片无法在页面显示

从数据库获取Base64编码的图片数据后,尝试将其显示在页面上,已成功获取数据并完成Base64解码,但图片仍无法显示。以下是我的代码:

{
    $img=$key->image;
    {
    $decode=base64_decode($img);
    if (write_file("assets/images/img.jpeg",$decode,"w+")) 

?>
        <img src="<?= base_url('assets/images/img.jpeg') ?>" width="70"height="70">
<?php
}

排查与解决步骤

  • 检查目录写入权限
    确保assets/images/目录具备服务器进程的写入权限,可通过执行chmod 755 assets/images/或chmod 775(根据服务器配置调整)来设置。

  • 验证文件写入结果
    查看assets/images/img.jpeg是否存在且文件大小不为0。若文件为空,说明write_file执行失败,可添加调试代码确认返回值:

    $writeSuccess = write_file("assets/images/img.jpeg", $decode, "w+");
    var_dump($writeSuccess); // 输出是否为true
    
  • 清理Base64前缀
    数据库存储的Base64数据可能带有data:image/jpeg;base64,这类前缀,需先移除再解码:

    $img = $key->image;
    if (strpos($img, 'data:image/') === 0) {
        $img = preg_replace('#^data:image/[^;]+;base64,#', '', $img);
    }
    $decode = base64_decode($img);
    
  • 确认URL与文件路径匹配
    在浏览器中直接访问base_url('assets/images/img.jpeg')生成的URL,检查是否能打开图片。若无法访问,需核对base_url配置是否正确,以及文件存储路径和URL映射是否一致。

  • 避免文件名冲突
    若循环处理多个图片,统一写入img.jpeg会导致文件被覆盖,需生成唯一文件名:

    $fileName = "assets/images/img_" . $key->id . ".jpeg";
    if (write_file($fileName, $decode, "w+")) {
        ?>
        <img src="<?= base_url($fileName) ?>" width="70" height="70">
        <?php
    }
    

内容的提问来源于stack exchange,提问作者shazin ahmed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 16:05:38