carrierwave content_type总是为零

时间:2012-12-14 10:47:00

标签: ruby-on-rails carrierwave

我正在开发Rails 3.2.9 app并使用Carrierwave作为文件上传器。 Carriverwave自述文件指出了获取正确content_type的方法:

  1. 将'carrierwave / processing / mime_types'添加到初始化程序或您的上传程序。
  2. 将包含CarrierWave :: MimeTypes的内容添加到您的上传器。
  3. 将进程:set_content_type添加到您的上传器。
  4. 基于此,我的上传者如下:

    # 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

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

如果在我的模型文件中尝试了同样的问题,我安装了上传器

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字段

答案 2 :(得分:0)

我遇到了完全相同的问题,但找不到简单的解决办法。

我的解决方法是将一个content_type列添加到模型中,并使用

在创建/更新过程中设置它
@model.content_type = params[:file_upload][:attachment].content_type

这很有效,但希望问题得到解决。