extension_whitelist предотвращает Faker :: Avatar.image - PullRequest
0 голосов
/ 23 февраля 2019

Я использую CarrierWave для загрузки файлов в мое приложение.

Я пытаюсь настроить базу данных по поддельным данным.

seed.rb

require "open-uri"
require 'openssl'

# https://github.com/stympy/faker/issues/763
OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE

puts 'Start inserting seed users...'

User.create!(name:  "Example User",
             username: "exampleuser",
             email: "example@railstutorial.org",
             website: "https://railstutorial.jp",
             bio: Faker::Lorem.sentence(6),
             phone: 99999999,
             gender: 1,
             avatar: open(Faker::Avatar.image(slug = nil, size = '300x300', format = 'jpg')),
             password:              "password",
             password_confirmation: "password")

99.times do |n|
 user = User.create!({
    name: Faker::Name.name,
    username: Faker::Internet.unique.user_name,
    email: Faker::Internet.unique.email,
    website: Faker::Internet.url,
    bio: Faker::Lorem.sentence(6),
    phone: Faker::PhoneNumber.cell_phone.to_i,
    gender: 0,
    avatar: open(Faker::Avatar.image(slug = nil, size = '300x300', format = 'png')),
    password:              "password",
    password_confirmation: "password"
  })

  puts "#{user.username} created!"
end

puts "Start inserting seed posts..."

users = User.order(:created_at).take(6)
50.times do
  users.each do |user|
    post = user.posts.create!({
      image: open(Faker::Avatar.image(slug = nil, size = '300x300', format = 'jpg')),
      content: Faker::Lorem.sentence(5)
    })

    puts "#{post.user.username}'s post created!"
  end
end

Когда я выполнил

bin/rails db:seed

, он возвращает

rails aborted!
ActiveRecord::RecordInvalid: Validation failed: Avatar You are not allowed to upload "" files, allowed types: jpg, jpeg, png

Итак, прокомментируйте приведенный ниже метод и попробуйте еще раз, чтобы он работал.

# def extension_whitelist
#   %w(jpg jpeg png)
# end

НоЯ хочу использовать extension_whitelist, чтобы предотвратить загрузку странных данных.

Как избежать extension_whitelist при использовании Faker::Avatar.image?

1 Ответ

0 голосов
/ 24 февраля 2019

Трудно ответить без MCVE .

У меня такое ощущение, что загрузка из Интернета не поддерживается в вашем приложении.

Но если вы говорите, что этовозможно, вы можете использовать type content filter в CarrierWave.

Таким образом, вы можете заменить extension_whitelist следующим способом:

def content_type_whitelist
  /image\//
end

Он будет проверять MIME-типы.

...