原文:https://meta.discourse.org/t/a-new-era-for-file-uploads-in-discourse/210469
翻译原文:https://rail.moe/t/topic/2702
在过去的几个月中,您可能已经注意到许多与 Discourse 核心上传相关的提交。这是核心内部从我们的代码库替换jQuery 文件上传的使用的整体努力的一部分,作为从我们的代码库替换 jQuery 本身的使用的更广泛的整体努力的一部分。jQuery 文件上传器是一个非常古老的项目,几乎从一开始就成为 Discourse 核心的一部分。我想我在其他项目的整个职业生涯中也都使用过它。但是是时候让 Ol’ Reliable 退休了:
我们已经用一个名为Uppy的库替换了 jQuery 文件上传(并且很快也会替换另一个库resumable.js)。这是一个更现代的上传库,可以通过插件轻松扩展,并且能够处理我们投入的所有不同工作流程。重要的是,这允许我们从 Discourse 客户端直接分段上传到 S3,而不必通过我们的 API 发送大文件。
编辑器现在将 Uppy 用于所有上传,整个应用程序中的许多其他地方都使用它(头像上传、个人资料背景上传等)。在接下来的几周内,最后的几个坚持将消失。对于大多数用户来说,这应该是一个很大程度上不可见的更改,但是插件和主题组件作者需要进行一些更改。
S3 分段直接上传
之前我提到我们使用 Uppy 还允许我们从 UI 直接分段上传到 S3。要启用此功能,您需要将enable_direct_s3_uploads
站点设置设置为true
。
如果您由我们托管,则相关的 S3 权限已应用于您的存储桶。但是,如果您是自托管,则必须在您的存储桶上设置多个权限和 CORS 规则才能使其正常工作。
对于 CORS 规则,您只需要s3:ensure_cors_rules
使用rake s3:ensure_cors_rules
. 只要您为 Discourse 实例上的 S3 凭证设置的任何访问和密钥启用S3:GetBucketCors
并S3:PutBucketCors
启用了权限,它就会将以下规则添加到您的存储桶中。
这是一个漫长的几个月的制作过程,我们还没有完成!当我们即将从 Discourse 核心中完全删除 jQuery 文件上传器和 resumable.js 时,我将在这个主题中发布。