ruby-on-rails - Rails] 富文本编辑器上传到 Amazon S3

标签 ruby-on-rails amazon-s3 ckeditor carrierwave redactor

我想在我的 Rails 应用程序中使用 ckeditor 或 redactor。 两者ckeditorredactor-rails已经与 Carrierwave 很好地集成,但我想知道如何编辑 Amazon S3 的上传文件夹而不是应用程序内的默认文件夹。

Redactor javascript 版本 ( this ) 实际上提供了一种使用 javascript 执行此操作的方法,但我想使用 Carrierwave 和 Fog 通过我的 Rails 应用程序来执行此操作。这对我来说似乎更自然,但请告诉我使用 javascript 这样做是否没有坏处,或者使用 Carrierwave 和 Fog 这样做是否有好处。

由于我还没有找到解决这个问题的方法,所以我避免集成富文本编辑器,并让用户只使用纯文本并在每个帖子上上传一张图片。然而,一个好的文本编辑器现在已经成为必需品。

我找不到有关此问题的任何文档,并且我确信还有很多其他人也遇到过类似的问题。

如果有人知道如何修复 ckeditor 和 redactor 的设置以使用 Carrierwave 和 Fog 将图片上传到 Amazon S3,请留下答案。我们将不胜感激。

最佳答案

将配置放在 JavaScript 端并没有什么坏处,因为你的私钥永远不会暴露(而且你永远不应该暴露它)。

您可以使用以下代码(位于服务器上)生成签名和策略。

policy_json='{"expiration": "2020-01-01T00:00:00Z",

  "conditions": [ 
    {"bucket": "bucket name"}, 
    ["starts-with", "$key", ""],
    {"acl": "public-read"},
    {"success_action_redirect": "redirect url"},
    ["starts-with", "$Content-Type", ""],
    ["content-length-range", 0, 1048576]
  ]
}'
policy=Base64.encode64(policy_json).gsub("\n","")
signature = Base64.encode64(OpenSSL::HMAC.digest(OpenSSL::Digest::Digest.new('sha1'), 'Your private key', policy)).gsub("\n","")

因此,您的私钥存储在服务器端,现在您可以进行 ajax 调用来获取这些值(策略和签名)并将其放在您的 View 中。

现在,在您的存储桶策略中,您可以指定AllowedOrigin 为www.yourwebsite.com。

这样做的目的是只允许您的网站将内容发布到存储桶,从而防止任何恶意用户将内容发布到您的帐户。

关于ruby-on-rails - Rails] 富文本编辑器上传到 Amazon S3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14657293/

相关文章:

javascript - CKEDITOR 遍历 body 中的所有元素

javascript - TinyMCE 或 CKeditor 与 Zend 的集成问题

ruby-on-rails - 如何在 RSpec 中模拟 block 参数?

ruby-on-rails - 带有未定义字段的 html_safe

ruby-on-rails - 将 SQL 查询转换为 Arel 时遇到问题

javascript - 精细上传者 : Change the file's name

javascript - CKEDITOR:如何以编程方式测试编辑器是否处于内联模式

ruby-on-rails - 在 Rails 4 中禁用 has_secure_password password_confirmation 检查

amazon-web-services - 多年来无法预签名 URL?

ruby-on-rails - 尝试设置 Amazon 的 S3 存储桶 : 403 Forbidden error & setting permissions