Проверка файла Mime Type не выполняется только при загрузке с использованием Ruby on Rails - PullRequest
0 голосов
/ 17 апреля 2019

Я использую этот код для загрузки файлов на сервер, и он работает нормально.

Сейчас я пытаюсь проверить типы файлов MIME, прежде чем разрешить загрузку файлов с помощью функции carrierwaves.

Я пытаюсь использовать Ruby Filemagic() как предложено в решении, найденном здесь ссылка , но, похоже, устарело, так как для него требуется версия Ruby менее 2.5.0

мой успех

Хорошо, я пытаюсь использовать Ruby MIME::Types.type_for() valiadation.

Он отлично работает при чтении файлов непосредственно с диска, как показано ниже

check=MIME::Types.type_for("C:/Users/Public/Pictures/Sample Pictures/america.jpg").first.content_type

Мои проблемы:

Если я попытаюсь прочитать файлы как часть загрузки формы, будет отображаться ошибка

undefined method `chomp' for #<ActionDispatch::Http::UploadedFile:0x0953a828>

согласно приведенному ниже коду

check=MIME::Types.type_for(image_params['attachment']).first.content_type

кажется, что шаблон проверки при чтении файлов изДиск отличается при чтении файлов как часть загрузки формы.Я думаю, что-то вроде MIME против Content_type.может кто-нибудь помочь мне с этим

вот image_controller

class ImagesController < ApplicationController

   def create


      print(' para: ', image_params['name'])
      print(' para: ', image_params['attachment'])

      #check=MIME::Types.type_for("C:/Users/Public/Pictures/Sample Pictures/america.jpg").first.content_type
      check=MIME::Types.type_for(image_params['attachment']).first.content_type
      print(check)

      @imagefile = Imagefile.new(image_params)

      if @image.save
         redirect_to images_path, notice: "file has been uploaded."
      else
         render "new"
      end

   end

   private
      def image_params
      params.require(:image).permit(:name, :attachment)
   end

end

Attachment _controller

class AttachmentUploader < CarrierWave::Uploader::Base

   storage :file

    def store_dir
       "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
   end

   def extension_white_list
      %w(pdf doc htm html docx png jpg gif)
   end

изображение модели

class Image < ApplicationRecord
   mount_uploader :attachment, AttachmentUploader # Tells rails to use this uploader for this model.

   validates :name, :attachment, presence: true # Make sure the owner's name is present.

end

1 Ответ

0 голосов
/ 17 апреля 2019

Mimemagic Gem это то, что работает для меня

Библиотека для определения типа MIME файла по расширению и содержимому.

источник

обнаруживает mimetypes с использованием добавочного имени

 MimeMagic.by_path('nancy.png')

обнаруживает mimetype, читая содержимое файла

  MimeMagic.by_magic(File.open('nanc.png'))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...