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

如何删除文章同时删除Summernote上传的图片?

解决删除文章时同步删除Summernote上传图片的问题

核心思路

从文章的content字段中提取所有Summernote上传的图片路径,逐个删除服务器上的对应文件;同时清理文章关联的主图(基于你使用的Laravel Media Library),最后执行文章删除操作。

修改后的destroy方法代码

public function destroy(Post $post)
{
    // 1. 处理Summernote编辑器内的图片
    $dom = new \DomDocument();
    // 加载文章内容,避免自动补全html/body标签
    $dom->loadHtml($post->content, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
    $images = $dom->getElementsByTagName('img');

    foreach ($images as $image) {
        $src = $image->getAttribute('src');
        // 仅处理本站summernote上传的图片,跳过外部链接图
        if (str_starts_with($src, '/summernoteUploads/')) {
            $filePath = public_path($src);
            // 文件存在时再删除,避免报错
            if (file_exists($filePath)) {
                unlink($filePath);
            }
        }
    }

    // 2. 删除文章关联的主图(对应store方法里的addMedia操作)
    $post->clearMediaCollection();

    // 3. 最后删除文章本身
    $post->delete();

    return redirect()->back()->with('status', 'Post Deleted Successfully');
}

补充说明

  • str_starts_with用于过滤路径前缀,确保只删除我们服务器上的Summernote图片,不会误操作外部链接的图片
  • 先判断file_exists再删除,避免因文件已被手动删除等情况抛出异常
  • 如果你给主图指定了媒体集合名称,可改用clearMediaCollection('你的集合名')来精准删除

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 17:24:27