Ok, ich erlaube Benutzern, mp3s hochzuladen. Aus irgendeinem Grund werden nur einige mp3-Dateien hochgeladen und andere nicht. Ich kann keinen unterscheidbaren Unterschied zwischen den funktionierenden und nicht funktionierenden Dateien finden.Rubin auf Schienen. Paperclip mp3 Validierung fehlgeschlagen
class Song < ActiveRecord::Base
belongs_to :user
has_attached_file :audio, :restricted_characters => /[&$+,\/:;[email protected]<>\[\]\{\}\|\\\^~%#]/, dependent: :destroy
validates_attachment_presence :audio
validates_attachment_content_type :audio, :content_type => [ 'audio/mpeg', 'audio/mp3' ]
validates_attachment_size :audio, :less_than => 20.megabytes
end
Die Serverausgabe für fehlgeschlagene Dateien ist;
Command :: file -b --mime '/tmp/acf7bcfce06ffcaa55511087ea2e486f20160427-7322-y1lyj6.mp3'
[paperclip] Content Type Spoof: Filename leyinnata.mp3 (audio/mp3 from Headers, ["audio/mpeg"] from Extension), content type discovered from file command: application/octet-stream. See documentation to allow this combination.
So ist die Datei als application/octet-stream
wird statt audio/mp3
gesehen und ich weiß nicht, warum.
beachtete ich auf den Vorschlag von der Dokumentation zu lesen und eine mögliche Lösung gefunden:
paperclip.rb
Paperclip.options[:content_type_mappings] = {
:audio=> 'application/octet-stream'
}
dies tut nichts. (Ich habe den Server neu gestartet)
Ich kann nicht verstehen, warum es nicht funktioniert und ich bin jetzt sehr frustriert. Jede Hilfe wäre dankbar, danke.
UPDATE:
Angeben mehr Audio-Dateitypen scheint keinen Unterschied zu machen.
validates_attachment_content_type :audio, :content_type => [ 'audio/mpeg', 'audio/x-mpeg', 'audio/mp3', 'audio/x-mp3', 'audio/mpeg3', 'audio/x-mpeg3', 'audio/mpg', 'audio/x-mpg', 'audio/x-mpegaudio' ]
Ich habe auch versucht application/octet-stream
-validates_attachment_content_type
zB das Hinzufügen.
validates_attachment_content_type :audio, :content_type => [ 'application/octet-stream', 'audio/mpeg', 'audio/x-mpeg', 'audio/mp3', 'audio/x-mp3', 'audio/mpeg3', 'audio/x-mpeg3', 'audio/mpg', 'audio/x-mpg', 'audio/x-mpegaudio' ]
Kein Glück.
Ich sah jemanden
hinzufügenPaperclip.options[:content_type_mappings] = {
audio: "application/octet-stream"
}
ihrer environment.rb Dateien. Das funktioniert auch nicht für mich.
UPDATE 2:
In paperclip.rb und fügt hinzu:
module Paperclip
# do not require any validations
REQUIRED_VALIDATORS = []
# do not complain when missing validations
class Attachment
def missing_required_validator?
false
end
end
# skip media type spoof detection
module Validators
class MediaTypeSpoofDetectionValidator < ActiveModel::EachValidator
def validate_each(record, attribute, value)
true
end
end
end
end
lässt mich laden, was ich brauche, aber das überspringt Validierungen Spoofing und ich stelle mir gefährlich werden könnte. Meine Benutzer dürfen auch Bilder in einem separaten Teil der Website hochladen und ich weiß, dass ich jetzt gegen Angriffe geschützt wäre.
UPDATE 3:
Ich habe
hinzugefügtmodule Paperclip
class MediaTypeSpoofDetector
def spoofed?
false
end
end
end
meiner paperclip.rb
. Dies scheint in Ordnung zu sein. Wenn jemand eine bessere Lösung finden kann, würde ich es gerne hören, sonst beantworte ich meine eigene Frage.
Arbeitete! Auch Rails4 mit Büroklammer 4.x –