Я использую этот код для загрузки файлов на сервер, и он работает нормально.
Сейчас я пытаюсь проверить типы файлов 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