RoR загрузка файлов | 15:48 |
Это не статья а скорее сборка рецептов из интернета и API, на русском языке. Т.к. опыта у меня пока маловато следовать рекомендациям не очень советую но почитать и попробовать можно. Меня заинтересовал вопрос, как загружать файлы, скажем для аватаров на сервер. Ответ нашелся быстро, на английском языке. Так-что попробую переосмыслить и выложить. Беглый осмотр по ActionView::Helpers::FormTagHelper не очень много дал, но это только на первый взгляд. Достоточно посмотреть на код:
Code file_field_tag(name, options = {}) Как станет ясно, что мы сделать можем. Не буду расписывать, просто приведу код примеров из API: Code file_field_tag 'attachment' # => <input id="attachment" name="attachment" type="file" /> file_field_tag 'avatar', :class => 'profile-input' # => <input class="profile-input" id="avatar" name="avatar" type="file" /> file_field_tag 'picture', :disabled => true # => <input disabled="disabled" id="picture" name="picture" type="file" /> file_field_tag 'resume', :value => '~/resume.doc' # => <input id="resume" name="resume" type="file" value="~/resume.doc" /> file_field_tag 'user_pic', :accept => 'image/png,image/gif,image/jpeg' # => <input accept="image/png,image/gif,image/jpeg" id="user_pic" name="user_pic" type="file" /> file_field_tag 'file', :accept => 'text/html', :class => 'upload', :value => 'index.html' # => <input accept="text/html" class="upload" id="file" name="file" type="file" value="index.html" /> Таким образом мы можем сделать input. Но для отправки файла на сервер этого не достаточно, нам нужно при создании самой формы прописать multipart:
Code <% form_for @user, :html => { :multipart => true } do |f| %> ... <%= f.file_field :avatar %> ... <%end%> Многоточие - соотв. другие поля. Code require "ftools" class Album < ActiveRecord::Base # Тут много вашего код # Зависимости и тд. after_save :write_file after_destroy :delete_file def avatar=(file_data) @file_data = file_data end # Записываем файл на диск def write_file if @file_data File.open("#{AVATAR_STORAGE_PATH}/#{id}.#{extension}", "w") { |file| file.write(@file_data.read) } end end # Удаляет файл аватара пользователя def delete_file FileUtils.rm_rf("#{AVATAR_STORAGE_PATH}/#{id}.#{extension}") end # Получаем расширение файла def extension @file_data.original_filename.split(".").last end end Код взят отсюда с небольшой модификацией. Оттуда же: Code Константа загрузочного пути. Установка значения идет в RAILS_ROOT/config/initializers/globals.rb. Просто создайте файл с понятным именем. Файл загружается при загрузке/перезагрузке сервера. # Установка пути для загрузки аватаров AVATAR_STORAGE_PATH = "#{RAILS_ROOT}/../storage/avatars" Ну вот и все, все остальные действия(имею ввиду контроллер) аналогичные стандартному добавлению данных из формы. Если есть ошибки, обязательно пишите | |
Категория: Coding | Просмотров: 905 | Добавил: DeT | Теги: rails, file upload |
Всего комментариев: 0 | |