Je voudrais permettre aux utilisateurs de télécharger des fichiers .jpg
mais seulement si elles sont en fait .jpg
(par exemple, cat.gif
renommé cat.jpg
serait pas travailcarrierwave: reject .gif .jpg renommé
Actuellement dans mon Carrierwave. ImageUploader.rb
Je:
include CarrierWave::RMagick
include CarrierWave::MimeTypes
process :set_content_type
def extension_white_list
%w(jpg jpeg png)
end
et dans mon dossier de test Rspec je le tester trois façons:
# Works
describe "with invalid mime type and invalid extension" do
before do
image.image = File.open(File.join(Rails.root, 'spec', 'support', 'image', 'images', 'executable.jpg')) # this is a .exe renamed to .jpg
end
it { image.should_not be_valid }
end
# Works
describe "with invalid mime type and invalid extension" do
before do
image.image = File.open(File.join(Rails.root, 'spec', 'support', 'image', 'images', 'test_gif.gif')) # this is a .gif
end
it { should_not be_valid }
end
# Doesn't work
describe "with invalid mime type and valid extension" do
before do
image.image = File.open(File.join(Rails.root, 'spec', 'support', 'image', 'images', 'test_gif.jpg')) # this is a .gif renamed to .jpg
end
it { image.should_not be_valid }
end
Les tests passent pour les deux premiers, mais échouent sur le second. Je ne sais pas pourquoi, puisque je n'ai pas gif
sur la liste blanche et je vérifie les types mime.
Des suggestions?
(Conversion gifs à jpgs est ma sauvegarde, mais je préférerais simplement les nier.)
Je pense que extension_white_list vérifie que l'extension. Je pense que vous devez vérifier l'attribut content_type: https://github.com/jnicklas/carrierwave/wiki/How-to%3A-Store-the-uploaded-file-size-and-content-type – micapam
le second " décrivez "est" il ne devrait pas être "valide" et d'autres sont "ça {image. ne devrait pas ..." êtes-vous sûr que le deuxième "c'est" le sujet? – kukrt
@micapam en incluant MimeTypes J'étais sous l'impression que je vérifiais content_type: https://github.com/jnicklas/carrierwave#setting-the-content-type – pseudosudo