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

如何将虚拟机PostgreSQL数据库中的图片显示到本地?黑屏问题求助

解决Odoo ir_attachment图片显示黑屏的问题

你踩了一个典型的Odoo文件存储误区——store_fname字段根本不是存二进制图片数据的,它只是记录了图片在Odoo文件系统里的存储路径,所以你用pg_unescape_bytea()去处理它,自然只会输出一堆无效内容,导致浏览器显示黑屏。

下面给你一步步修正的方案:

核心问题说明

Odoo的ir_attachment表有两种存储方式:

  • 当store_fname有值时:文件存在Odoo的本地文件系统(filestore)里,store_fname是相对路径
  • 当store_fname为空时:二进制数据才存在datas字段(bytea类型)里,这时候才需要用pg_unescape_bytea()处理

你的场景显然是第一种,所以得去读取对应路径的文件,而不是操作数据库字段的内容。

修正后的PHP代码

<?php
// 1. 建立数据库连接
$conn = pg_connect("user = admin password = admin host = 192.168.1.11 dbname = odoo");
if (!$conn) {
    die("数据库连接失败: " . pg_last_error());
}

// 2. 查询目标附件的存储路径
$res = pg_query($conn, "SELECT store_fname FROM ir_attachment WHERE res_model = 'res.partner' AND res_field = 'image' AND res_id = 3;");
if (!$res) {
    die("查询失败: " . pg_last_error());
}

$store_fname = pg_fetch_result($res, 'store_fname');
pg_close($conn);

// 3. 配置Odoo的filestore根路径(替换成你实际的路径)
// 示例路径:Ubuntu系统Odoo默认安装的路径
$filestore_root = '/var/lib/odoo/.local/share/Odoo/filestore/odoo/';
// 拼接完整的图片路径(store_fname格式是ab/abcdef0123456789,直接拼接即可)
$full_image_path = $filestore_root . $store_fname;

// 4. 读取并输出图片
if (file_exists($full_image_path)) {
    // 动态获取图片的MIME类型,避免硬写jpeg不兼容png等格式
    $mime_type = mime_content_type($full_image_path);
    header("Content-Type: $mime_type");
    // 直接输出文件内容
    readfile($full_image_path);
} else {
    // 文件不存在时的错误处理
    header("HTTP/1.0 404 Not Found");
    echo "图片文件不存在,请检查路径或记录是否正确";
}
?>

关键注意事项

  1. 确认filestore路径:

    • 你可以在Odoo的配置文件(odoo.conf)里找到data_dir配置项,filestore就在这个目录下的filestore/[你的数据库名]/文件夹里
    • 如果是源码安装,默认路径可能是odoo/filestore/[数据库名]/,根据你的实际部署调整
  2. 权限问题:

    • 运行PHP的用户(比如Apache的www-data、Nginx的nginx)需要有读取Odoo filestore目录的权限,否则会因权限不足无法读取文件,依然显示黑屏
  3. MIME类型适配:

    • 不要硬写image/jpeg,因为Odoo里的图片可能是PNG、WEBP等格式,用mime_content_type()动态获取更稳妥

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:31:06