Skip to content

图片 ​

支持本地上传、拖拽 / 粘贴插入、拖宽、裁剪、替换、说明文字、点开预览。上传优先走宿主 uploader.upload;外链图片默认按原地址加载(network.mode: 'open'),切到 offline 后显示占位块。

配置 ​

js
new LarkDoc({
  element: '#editor',
  features: { images: true },
  limits: { maxImageSize: 5 * 1024 * 1024 },     // 单张 5MB
  uploader: {
    upload: async (file) => {
      const form = new FormData()
      form.append('file', file)
      const res = await fetch('/api/upload', { method: 'POST', body: form })
      const data = await res.json()
      return { url: data.url, attchId: data.id }   // attchId 可选,会随 JSON 一起保存
    },
  },
})
配置项默认值说明
features.imagestrue关闭后图片入口隐藏。
limits.maxImageSize5MB单张大小上限。
uploader.upload内置本地读取宿主接管上传;不提供时转 base64 本地预览。
network.mode'open'外链图片策略,见网络策略。
network.imageProxy-把外链图转存成本地地址。

怎么用 ​

入口操作
工具栏 / 插入菜单打开文件选择。
粘贴 / 拖拽直接插入,自动走上传钩子。
选中图片拖四角调宽度;工具条给裁剪、替换、说明文字、预览、删除。
双击大图预览。

数据契约:<img src alt width data-attch-id>;JSON 为 { type: 'image', attrs: { src, alt, width, attchId? } }。被网络策略拦下的外链图 src 为空、原地址留在 data-original-src。

src 有两种来源,写法完全一样:

来源src 长什么样说明
上传data:image/png;base64,…图片跟着文档走,不依赖图床,适合离线 / 单文件分发。
远程地址https://www.a.com/a.img按原地址引用,不转存、不转 base64;随时能换图(换的是服务端文件)。
js
// 直接写远程地址也是合法图片块
editor.commands.setImage({ src: 'https://www.a.com/a.img', alt: '远程图' })

远程地址受网络策略影响:默认 open 照常加载;配成 allowlist / offline 时被拦下的图会降级成占位卡,原地址保留在 data-original-src,导出 HTML 时仍按原地址写出。

导出 HTML 时的两种媒体写法 ​

图片、视频、音频、附件在 HTML 产物里有两种呈现,由 media.htmlMode 决定。JSON 永远不受影响。

js
new LarkDoc({
  element: '#editor',
  media: {
    htmlMode: 'inline',   // 'inline' | 'link',默认 inline
    linkText: '',         // link 档的链接文字,留空用地址本身
    newTab: true,
  },
})

// 单次覆盖,不改实例配置
const html = doc.getHTML({ media: { mode: 'link' } })
取值输出什么时候用
'inline'(默认)保留 <img> / <video> 等本体,正文能直接渲染出图正文阅读页
'link'换成 <a href> 一条地址,块级媒体再包一层 <p class="lark-doc-media-link-block">贴到邮件 / IM / 只接受文字和链接的系统

linkText 支持 {name} / {url} / {type} 占位。两种档位都原样保留 src 里的远程 https:// 地址(不转存、不转 base64),所以正文用外链图时,inline 出 <img src="https://www.a.com/a.img">,link 出指向同一地址的 <a href>。link 档输出长这样:

html
<p class="lark-doc-media-link-block" data-media-type="image">
  <a class="lark-doc-media-link" data-media-type="image"
     href="https://cdn.example.com/a.png"
     target="_blank" rel="noopener noreferrer">https://cdn.example.com/a.png</a>
</p>

link 是单向的

link 只改 HTML 输出,编辑器里的节点还是完整图片,getJSON() 不受影响。但把 link 档 HTML 重新粘回编辑器,图片会变成普通链接,回不来。需要往返编辑就用 inline,或者用 JSON / DOCX 交换。

上传失败

upload 抛错时图片回退成 base64 本地预览并提示,不会丢用户刚选的图。