我尝试创建一个文件上传模型,它使用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
方法中。
现在它确实有效。但我仍在寻找更清洁的解决方案。