2016-04-27 13 views
2

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ügen
Paperclip.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ügt
module 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.

Antwort

5

Ok löste ich es durch alles zu entfernen, die ich in der ‚Updates‘ setzen und das Hinzufügen von

Paperclip.options[:content_type_mappings] = { 
    :mp3 => "application/octet-stream" 
} 

paperclip.rb

+0

Arbeitete! Auch Rails4 mit Büroklammer 4.x –

0

Vielleicht müssen Sie spezifischer mit mp3 Typen Validierungen werden. Wie ein Beispiel

Sie sollten

validates_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' ] 

hoffen, dass dies Ihr Problem lösen. Informieren Sie uns bitte.

+0

Hey, danke die Antwort, aber es hilft nicht. Ich bekomme genau das gleiche Ergebnis. –