如何在页面显示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
相关产品推荐
相关产品推荐

