Webuilder240

PaparClipでCSVをS3にアップロードした時にContent-Typeが'text/plain'になってしまう問題

2018-02-13 18:00:00 +0900

PaperClip Rails

概要

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

関連しそうなブログ