Flarum FoF Upload 插件升级之后 aws-s3 兼容模式编辑帖子图片无法再显示的解决方法
不知为何,本站帖子的图片突然显示有问题了。
插入图版时,代码是
[upl-image-preview uuid=2a58bb66-edef-49cf-8810-2a267ebdc6aa url=//flarum-images.w.idev.top/2023-09-27/1695821348-423881-image.png]
而早前的帖子代码是
[upl-image-preview url=//flarum-images.w.idev.top/2023-09-27/1695821348-423881-image.png]
并无 uuid 字段。应该是早期的版本并无 UUID 字段。
帖子一般能正常显示,但是当编辑旧帖子时,无 uuid 字段时,图片就不会再显示。
解决方法是,添加一个 uuid 字段即可,值可以随便填。
uuid=uuid
图片优先通过 url 字段查询,若无效,就会显示 uuid 字段对应的图片。
以下 SQL 代码,是将旧版本内容,变更为包含 uuid 字段的内容。
-- 检查需要替换的内容,确保关联关系正确
SELECT 
    bbs_posts.id AS post_id,
    bbs_posts.content AS old_content,
    GROUP_CONCAT(CONCAT('uuid=', bbs_fof_upload_files.uuid, ' url=', bbs_fof_upload_files.url)) AS replacements
FROM 
    bbs_posts
JOIN 
    bbs_fof_upload_files
ON 
    bbs_posts.content LIKE CONCAT('%url=', bbs_fof_upload_files.url, '%')
GROUP BY 
    bbs_posts.id;
-- 使用递归替换多个匹配项
-- 更新 content 字段,将所有匹配的 uuid=uuid 替换为 uuid=对应uuid 值
UPDATE 
    bbs_posts
JOIN 
    bbs_fof_upload_files
ON 
    bbs_posts.content LIKE CONCAT('%url=', bbs_fof_upload_files.url, '%')
SET 
    bbs_posts.content = REGEXP_REPLACE(
        bbs_posts.content,
        CONCAT('uuid=uuid url=', bbs_fof_upload_files.url),
        CONCAT('uuid=', bbs_fof_upload_files.uuid, ' url=', bbs_fof_upload_files.url)
    );
以上两个表结构如上。
将表2 bbs_posts 中的  "uuid=uuid url=//flarum-images.w.idev.top/2021-09-19/1632031204-451518-image.png" 中的 uuid 值修改为 表1 bbs_fof_upload_files 中的 uuid 字段,关联条件是 表1 的 url 与 表2 中包含对应的 content 的数据。
content 字段中可能包含多个图片(即多个 uuid 和 url 对的情况),我们需要处理所有匹配的 url,并为每个 url 替换对应的 uuid。