受限制的上传识别码使得编写使用上传资产的主题组件变得困难

大家好,

最近我写了一个 Discourse 主题组件 (GitHub - Beholder-Vision/discourse-insert-model-3d: A Discourse theme component for adding 3D models to topics),它允许 Discourse 管理员在他们的论坛上上传和显示 3D 模型。

起初一切似乎都运行良好,直到我收到报告说一些上传的模型消失了,然后我在自己的论坛上检查时发现上传的资源(3D 模型和海报图片)也被清理了 Insert Model 3D - #2 by patrickemin

阅读文档 (Understanding Uploads, Images, and Attachments) 时,我曾以为上传的资源会没问题,因为它们被帖子引用了,但在进行了一些挖掘后,我发现了这段代码 discourse/app/models/post.rb at 03bb43f7468d3aa6e73bba0805193ae50c7ec2d5 · discourse/discourse · GitHub HTML 标签之一引用时,才被认为是由帖子引用的。因此,如果一个链接的上传文件被 <a> 元素的 href 属性引用,它将被识别,但如果它被 <model-viewer> 元素的 src 属性引用(这是我的新主题组件添加的内容),则不会被识别。

能否请熟悉这段代码的人确认我的理解是否正确?如果正确,我认为创建主题组件的人可以通过生成一个引用该资源的隐藏 <a> 链接来将资源标记为上传内容,但如果文档 (Understanding Uploads, Images, and Attachments) 能更新以突出这个陷阱,那将非常有帮助。

非常感谢
Alan

3 个赞

您的参数和源都来自 JSON 解析,因此自动执行此操作(至少可以说)感觉很棘手。

我感觉,从根本上说,这要求 API 将上传“硬附加”到帖子,并以一种永远不会被清理的方式对其进行标记。

这会为其他问题打开闸门(我在哪里可以看到哪些上传是硬附加的?限制是什么?)。

话虽如此,硬附加似乎是解决此问题的唯一干净方法。

隐藏链接确实可以作为一种变通方法。

我正在将此移至功能请求,因为它按设计工作,但 API 在这里并没有让您的生活轻松。

我将标记 dev-xp 团队,他们可能对此有更多想法。