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

Contentful富文本嵌入资产仅返回ID无URL问题求助

Contentful富文本字段中嵌入资产(图片)的正确显示方法

你用NodeJS中间件聚合Contentful内容时,富文本字段里的嵌入图片只返回ID、没有URL,用@contentful/rich-text-html-renderer处理也只能拿到段落内容?问题根源是Contentful默认不会自动展开富文本里的嵌入资产链接,得按下面两步处理:

1. 获取Contentful内容时,显式解析资产链接

Contentful的API默认不会返回嵌套链接的完整数据,必须在请求时通过include参数指定要展开的链接层级。如果是用Contentful Delivery SDK,在getEntries时加上这个参数:

const contentful = require('contentful');
const client = contentful.createClient({
  space: '你的Space ID',
  accessToken: '你的访问令牌'
});

client.getEntries({
  content_type: '你的内容类型ID',
  include: 2 // 至少设为1,确保展开富文本里的嵌入资产
})
.then(entries => {
  // 此时返回的条目里,富文本的embedded_asset会包含完整的资产数据
})
.catch(err => console.error(err));

2. 修改富文本转HTML的逻辑,提取图片URL

当资产数据被完整返回后,node.data.target里会有fields字段,包含图片的文件地址和元信息。修改你的Angular代码如下:

import { documentToHtmlString } from '@contentful/rich-text-html-renderer';
import { BLOCKS } from '@contentful/rich-text-types';

_returnHtmlFromRichText(richText) {
  return documentToHtmlString(richText, {
    renderNode: {
      [BLOCKS.EMBEDDED_ASSET]: (node) => {
        const asset = node.data.target;
        // 从资产的file字段里取URL,注意要补全https前缀
        const imageUrl = `https:${asset.fields.file.url}`;
        // 用资产的标题作为alt文本,没有的话用默认值
        const altText = asset.fields.title || '图片';
        return `<img src="${imageUrl}" alt="${altText}" />`;
      }
    }
  });
}

这样处理后,富文本里的嵌入图片就能正确生成带URL的<img>标签了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 15:40:24