Paperclip- validate pdfs with content_type='application/octet-stream'

前端 未结 3 1018
走了就别回头了
走了就别回头了 2020-12-28 09:58

I was using paperclip for file upload. with validations as below:

validates_attachment_content_type :upload, :content_type=>[\'application/pdf\

相关标签:
3条回答
  • 2020-12-28 10:52

    For paperclip 3.3 and Rails 3, I did this a bit differently

    before_validation on: :create do   
      if media_content_type == 'application/octet-stream'
        mime_type = MIME::Types.type_for(media_file_name) 
        self.media_content_type = mime_type.first if mime_type.first  
      end
    end
    
    validates_attachment :media, content_type: { content_type: VALID_CONTENT_TYPES } 
    

    By the way, i needed to do this because testing with Capybara and phantom js using attach_file did not generate the correct mime type for some files.

    0 讨论(0)
  • 2020-12-28 10:54

    Seems like paperclip doesn't detect content type correctly. Here is how I was able to fix it using custom content-type detection and validation (code in model):

    VALID_CONTENT_TYPES = ["application/zip", "application/x-zip", "application/x-zip-compressed", "application/pdf", "application/x-pdf"]
    
    before_validation(:on => :create) do |file|
      if file.media_content_type == 'application/octet-stream'
        mime_type = MIME::Types.type_for(file.media_file_name)    
        file.media_content_type = mime_type.first.content_type if mime_type.first
      end
    end
    
    validate :attachment_content_type
    
    def attachment_content_type
      errors.add(:media, "type is not allowed") unless VALID_CONTENT_TYPES.include?(self.media_content_type)
    end
    
    0 讨论(0)
  • 2020-12-28 10:57

    Based on the above, here's what I ended up with which is compatible with PaperClip 4.2 and Rails 4:

    before_post_process on: :create do    
      if media_content_type == 'application/octet-stream'
        mime_type = MIME::Types.type_for(media_file_name) 
        self.media_content_type = mime_type.first.to_s if mime_type.first  
      end
    end
    
    0 讨论(0)
提交回复
热议问题