2016-12-03 3 views
1

Я использую paperclip для загрузки файлов «application/octet-stream» mime-типа, но они не проверяются правильно.Rails, Paperclip не подтверждает тип контента «application/octet-stream»?

В контроллере, когда я называю replay.save!, я получаю следующее сообщение об ошибке:

Validation failed: r_file has contents that are not what they are reported to be, r_file is invalid, r_file content type is invalid 

Вот модель:

class Replay < ApplicationRecord 
    has_attached_file :r_file 
    validates_attachment_content_type :r_file, content_type: { content_type: "application/octet-stream" } 
end 

и метод создания в контроллере воспроизведения:

def create 
    @replay = Replay.new(replay_params) 
    if @replay.save 
     # This never runs because it won't validate. 
     puts "REPLAY SAVED." 
     redirect_to @replay 
    else 
     puts "REPLAY NOT SAVED." 
     render 'new' 
    end 
end 

Я проверил mime-тип файла, который я пытаюсь загрузить, и это определенно тип "application/octet-stream". Является ли Paperclip просто неправильным чтение файла?

EDIT:

Вот схема:

ActiveRecord::Schema.define(version: 20161203161351) do 

    create_table "replays", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8" do |t| 
    t.string "map" 
    t.datetime "created_at",   null: false 
    t.datetime "updated_at",   null: false 
    t.string "r_file_file_name" 
    t.string "r_file_content_type" 
    t.integer "r_file_file_size" 
    t.datetime "r_file_updated_at" 
    end 

end 
+0

Paperclip не использует тип мим драгоценный камень, чтобы выяснить тип файла он использует 'file' check https://github.com/thoughtbot/paperclip/issues/1530 –

+0

Возможно, файл возвращает что-то другое, например' application/x-bittorrent', но тип mime рассматривает его как 'octet-stream' –

+0

Не будет ли тип файла одинаковым? Я просто попытался проверить использование 'application/x-bittorrent', и это тоже не сработало. – Fianchetto

ответ

1

Validate все форматы в рельсах видео/Image

validates_attachment_content_type :media, 
     content_type: [ 
     'image/jpg', 
     'image/jpeg', 
     'image/pjpeg', 
     'image/png', 
     'image/x-png', 
     'video/avi', 
     'video/mov', 
     'video/mp4', 
     'video/x-flv', 
     'video/3gpp', 
     'video/quicktime', 
     'video/x-msvideo', 
     'video/x-ms-wmv', 
     'flv-application/octet-stream', 
     'application/octet-stream', 
     'video/x-flv', 
     'video/mpeg', 
     'video/mpeg4', 
     'video/x-la-asf', 
     'video/x-ms-asf' 
     ], 
     :message => 'file type is not allowed' 
Смежные вопросы