Ajax-upload + Carrierwave + Rails 3.2.3
Вчера я рассказал как настроить связку Uploadify 3.1 + Carrierwave + Rails 3.2.3.
Сегодня расскажу о другом ajax-аплоадере файлов и как заставить его работать с рельсами. Как и вчера, работающее приложение можно найти на Github-е.
В данном случае в качестве загрузчика я использовал ajax-upload. Работающий пример можете посмотреть на сайте автора. Простенький, без излишеств, аплоадер.
По традиции, начну именно с него.
- Так как это, типа, мультимедиа приложение, то я разрешил загружать только mp3 файлы.
- Как и в случае с Uploadify, пришлось подшаманить функцию _formatFileName, которая сокращала имена файлов, а это пагубно сказывалось на возможность подгрузки ajax-ом файлов с сервера.
В общем, ничего необычного, после отправки файла на сервер, информация о нём подгружается в уже существующую таблицу, всё просто.
Не много о настройках Carrierwave.
- Добавляем возможность нормального оперирования с файлами, содержащими не латинские символы, в частности, кириллицу: CarrierWave::SanitizedFile.sanitize_regexp = /[^a-zA-Zа-яА-ЯёЁ0-9\.\_\-\+\s\:]/
- А ещё я заменил директорию , куда будут сохранятся файлы, на «uploads/audio»
Вот и всё, что касается Carrierwave.
Теперь перейдём к махинациям с «рельсами».
- Добавьте в Gemfile gem ‘rack-raw-upload’. Это пригодится для работы с ajax-upload.
- Обратите внимание на фунцию create нашего контроллера, как получается имя нашего файла, который нужно сохранить в базе: file = params[:qqfile].is_a?(ActionDispatch::Http::UploadedFile) ? params[:qqfile] : params[:file]. Это всё из-за особенностей пересылки файлов нашим аплоадером.
- Обращаю Ваше внимание, что ответ от сервера должен быть в json-формате. Обязательно ответ должен содержать success: true, иначе на клиентской части будет выдаваться ошибка. Так же в ответе передаётся некоторая информация, которая необходима нам для обновления списка файлов.
- В application.rb необходимо добавить следующее: config.middleware.use ‘Rack::RawUpload’
Ну а в качестве проигрывателя я использовал jQuery Media Plugin. Тут тоже не обошлось без заковырок, так что в самом файле плагина исходную строчку заменил на mp3Player: ‘http://malsup.github.com/mediaplayer.swf’. И всё завертелось (-:
Вот, собственно, опять и всё. Надеюсь, кому-то будет полезным.
Недавние записи
- Long time no see
- Ошибка при обновлении Meteor до версии 1.4.2
- Patch falcon для ruby-1.9.3-p327
- Ускоряем ruby и Rails
- Gem ‘seo_params’: определение основных параметров
- Отрицательный margin-top и Opera
- Rspec and Devise reset password
- Backbone.js: Views. Часть первая.
- Backbone.js: Models and Collections
- Backbone.js Routers