2013-02-02 85 views
2

我想爲我的rails應用程序使用ckeditor或redactor。 ckeditorredactor-rails與Carrierwave已經很好的集成,但我想知道如何將上傳文件夾編輯到我的Amazon S3,而不是應用程序中的默認文件夾。Rails]上傳到Amazon S3的富文本編輯器

Redactor JavaScript版本(this)實際上提供了一種使用javascript來做到這一點的方法,但我想通過使用Carrierwave和Fog的rails應用程序來完成此操作。這對我來說似乎更加自然,但請告訴我,如果使用javascript做這件事沒有任何壞處,或者使用Carrierwave和Fog做好這件事。

因爲我還沒有找到解決這個問題的辦法,所以我避免了集成一個富文本編輯器,並且讓用戶只使用純文本並在每個帖子上傳一張圖片。然而,一個不錯的文本編輯器現在已經成爲一種必需。

我在這個問題上找不到任何文件,我敢肯定還有很多其他人遇到過類似的問題。

如果有人知道如何修復ckeditor和redactor的設置以使用carrierwave和fog將圖片上傳到Amazon S3,請留下一個答案。這將不勝感激。

+0

我想你應該考慮改變你的'carrierwave'配置上傳到S3。只需要明確'redactor-rails' gem使用的上傳器的名稱。 –

回答

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。

這樣做只會讓您的網站將內容發佈到存儲分區,從而防止惡意用戶向您的帳戶發佈內容。