PaparClipでCSVをS3にアップロードした時にContent-Typeが'text/plain'になってしまう問題
2018-02-13 18:00:00 +0900
概要
PaperClipで、Railsで生成したCSVファイルをS3にアップロードするときに、Content-Typeが"text/plain"でアップロードされてしまうので、 S3にアップロードしたときに.txtファイルになってしまう問題がある。
とりあえずの解決方法
とりあえずS3にアップロードするタイミングでヘッダーにContent-Typeに"text/csv"を設定すればとりあえずOK。
今回利用したかったケースはシステム内部で生成したCSVをS3にアップロードする要件なので。 特にバリデーション周りが雑なんだけどまぁこんな感じで。
class Document < ActiveRecord::Base
has_attached_file :document,
storage: :s3,
s3_credentials: "#{Rails.root}/config/private_s3.yml",
s3_permissions: :private,
path: "example.com/:id/:filename"
validates_attachment :document, less_than: 512.megabytes
do_not_validate_attachment_file_type :document
end
class DocumentCsv < Document
has_attached_file :document,
storage: :s3,
s3_credentials: "#{Rails.root}/config/private_s3.yml",
s3_permissions: :private,
path: "example.com/:id/:filename",
s3_headers: {"Content-Type" => "text/csv"}
end