5

Rails 3.2.9 アプリを開発しており、Carrierwave をファイル アップローダーとして使用しています。Carriverwave の readme は、正しい content_type を取得する方法を指摘しています。

  1. require 'carrierwave/processing/mime_types' をイニシャライザーまたはアップローダーに追加します。
  2. include CarrierWave::MimeTypes をアップローダに追加します。
  3. プロセス :set_content_type をアップローダに追加します。

これに基づいて、私のアップローダーは以下のとおりです。

# encoding: utf-8
require 'carrierwave/processing/mime_types'
class AttachmentUploader < CarrierWave::Uploader::Base
  include CarrierWave::MimeTypes
  storage :file
  def store_dir
    "#{base_store_dir}/#{model.id}"
  end
  process :set_content_type

end

私のモデルでは、アップローダーをファイルとしてマウントします。

mount_uploader :file, AttachmentUploader

ただし、ファイルをアップロードした後、常に content_type nil を取得しました。

1.9.3-p327 :013 > a.file.class
 => AttachmentUploader
1.9.3-p327 :010 > a.file.file
 => #<CarrierWave::SanitizedFile:0x00000004046330 @file="uploads/course/000/000/026/attachment_file/6/myIcon.png", @original_filename=nil, @content_type=nil> 

なにか提案を?ありがとう。

PS: 私はすでにgem "mime-types", "~> 1.19"私のGemfile.

4

3 に答える 3

2

アップローダーをマウントしたモデルファイルで同じ問題が発生した場合

before_save :set_mime_type                   

    def set_mime_type
      self.mimetype = Mime::Type.lookup_by_extension(File.extname(self.cf_filename.to_s)[1..-1]) 
    end

注: テーブルに mimetype フィールドが必要です

于 2013-10-09T09:56:39.957 に答える
2

ここに記載されている手順に従う必要があります: https://github.com/carrierwaveuploader/carrierwave#setting-the-content-type

mime-types gem を追加し、アップローダー ファイルを次のようにセットアップします。

require 'carrierwave/processing/mime_types'

class MyUploader < CarrierWave::Uploader::Base
    include CarrierWave::MimeTypes

    process :set_content_type
 end
于 2013-09-20T14:55:10.020 に答える