RoR,Paperclip和S3 - 动态定义内容类型

时间:2015-08-10 09:13:13

标签: ruby-on-rails amazon-s3 paperclip

我尝试创建一个文件上传模型,它使用Paperclip帮助用户将HTML,CSS,JS和图像上传到S3。

我遇到了CSS文件的问题,这些文件是使用“text / plain”内容类型上传的。 我尝试在“保存前”回调中更改“S3 Headers”,但奇怪的是,它只会影响上传的下一个文件(因此第一个文件(例如style.css)将是“text / plain”而第二个 - “text” / css“,即使它是图像。

这是我的代码:

class Asset < ActiveRecord::Base
  has_attached_file :file, {
                    :storage => :s3,
                    :s3_credentials => "#{Rails.root}/config/s3_credentials.yml",
                    :s3_permissions => :private,
                    :s3_headers => { 'Cache-Control' => 'max-age=2592000', 'Expires' => 10.years.from_now.httpdate }
  }
  before_save :set_content_type

  def set_content_type
    mime_type = MIME::Types.type_for(self.file_file_name).first.to_s
    self.file.instance_write(:content_type, mime_type)
    self.file.options[:s3_headers]['Content-Type'] = mime_type
  end
end

如何让S3 Headers工作?

编辑: 我已将self.file.send :initialize_storage添加到set_content_type方法中。

现在它确实有效。但我仍在寻找更清洁的解决方案。

0 个答案:

没有答案