Rails]富文本编辑器上传到Amazon S3

时间:2013-02-02 00:29:10

标签: 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和雾将图片上传到Amazon S3,请留下答案。非常感谢。

1 个答案:

答案 0 :(得分:3)

将配置放在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调用以获取这些值(策略和签名)并将其放在您的视图上。

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

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