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。