Pour référence, j'ai suivi ce tutoriel: https://devcenter.heroku.com/articles/Paperclip-s3 Sauf que je suis en train de tester localhost en ce moment, j'ai donc installé la gem Figaro et placé mes informations S3 dans l'application .yml.
Utilisation de Rails v4, Cocaine v0.5.3 et Paperclip v4.1.0 (ne sait pas s’il est nécessaire de mentionner d’autres numéros de version de gem).
J'ai un modèle appelé SubmissionDetails, où, dans son nouveau fichier .html.erb, j'essaie de télécharger un fichier jpg dans une colonne appelée pièce jointe. Voici le code de modèle pertinent:
has_attached_file :attachment, styles: {
thumb: '200x200>',
large: '800x800>'
}
validates_attachment_content_type :attachment, content_type: /\Aimage\/.*\Z/
Lorsque j'essaie de télécharger un fichier jpg, il retourne au formulaire avec le message d'erreur suivant:
1 error prohibited this submission_detail from being saved:
Attachment translation missing:
en.activerecord.errors.models.submission_detail.attributes.attachment.spoofed_media_type
Je comprends une partie de l’erreur, ce texte pour afficher ce message d’erreur est absent de mon fichier en.yml, mais qu’en est-il de cette partie de type de média usurpée?
Cela apparaît dans la console de mon serveur, ne sachant pas si cela est pertinent:
[Paperclip] Content Type Spoof: Filename header.jpg (["image/jpeg"]), content type discovered from file command: . See documentation to allow this combination.
(0.0ms) rollback transaction
Ce message est généré par une vérification de validation de l'usurpation de contenu.
Pour Paperclip v.4, cela génère un bogue https://github.com/thoughtbot/Paperclip/issues/1429
Alors que pour Paperclip v.3, il semble qu'il jette juste un avertissement de dépréciation, https://github.com/thoughtbot/Paperclip/issues/1423
J'attendais donc que l'équipe de Paperclip résolve ce problème avant d'utiliser la version 4. Pour le moment, je préfère continuer à utiliser la version 3.
gem "Paperclip", "~> 3.5.3"
Ou ajoutez ceci à un initialiseur pour désactiver la protection contre l'usurpation d'identité:
require 'Paperclip/media_type_spoof_detector'
module Paperclip
class MediaTypeSpoofDetector
def spoofed?
false
end
end
end
voir Impossible de télécharger une image avec Paperclip 4.0 Rails 3
Comme expliqué récemment dans les commentaires du numéro ( https://github.com/thoughtbot/Paperclip/issues/1429#issuecomment-49821032 ), en ajoutant:
Paperclip.options[:command_path] = '/usr/bin'
to config/initializers/Paperclip.rb a résolu le problème.
Sur le même problème, j'ai trouvé une autre solution de contournement qui peut être appliquée au niveau du modèle, sans modifier d'initialisateur:
class PaperclipModel < ActiveRecord::Base
has_attached_file :attachment, { validate_media_type: false }
validates_attachment :attachment, {
# Tweak as desired
content_type: { content_type: ["text/csv", "text/plain", Paperclip::ContentTypeDetector::SENSIBLE_DEFAULT] }
}
end
Fondamentalement, cela ignore les validations media_type
et content_type
pour éviter les erreurs d'usurpation sur les pièces jointes PaperclipModel
. Pour plus de détails, voir ici .