Kéo thả upload ảnh trong rails sử dụng dropzonejs-rails
Dropzone là một thư viện javascript cho phép upload nhiều ảnh bằng kéo thả, hoặc chọn ảnh từ thư mục.Bài viết này sẽ hướng dẫn từng bước cách sử dụng thư viện dropzone trong rails với gem carrierwave Cách cài đặt Thêm vào trong Gemfile gem carrierwave hỗ trợ upload files từ Ruby applications ...
Dropzone là một thư viện javascript cho phép upload nhiều ảnh bằng kéo thả, hoặc chọn ảnh từ thư mục.Bài viết này sẽ hướng dẫn từng bước cách sử dụng thư viện dropzone trong rails với gem carrierwave
Cách cài đặt
Thêm vào trong Gemfile gem carrierwave hỗ trợ upload files từ Ruby applications và gem dropzonejs-rails rồi bundle install
gem 'dropzonejs-rails' gem 'carrierwave'
Thêm vào application.js
//= require dropzone
Thêm vào application.css
*= require dropzone/dropzone
Carrierwave generate uploader
rails g uploader picture
Sau khi generate sẽ tạo ra filepicture_uploader.rb trong thư mục uploaders. Có thể tham khảo cách sử dụng carrierwave tại đây carrierwave
Generate model Image
rails g model Image file_name:string class Image < ApplicationRecord mount_uploader :file_name, PictureUploader end
Generate ImageController
rails generate controller images class ImagesController < ApplicationController def index end def create @image = Image.new(file_name: params[:file]) if @image.save render json: { message: "success", fileID: @image.id }, :status => 200 else render json: { error: @image.errors.full_messages.join(',')}, :status => 400 end end private def image_params params.require(:image).permit(:avatar) end end
Thêm trong routes file
resources :images, only: [:index, :create] root "images#index"
View
Trong file /images/index.html.erb tạo div có chứa class dropzone. Đây là class bắt buộc để dùng với dropzone
<div class="dropzone" id="image-upload"></div>
Javascripte
<script> $(document).ready(function(){ Dropzone.autoDiscover = false; var dropzone = new Dropzone ("#image-upload", { paramName: "image[avatar]", addRemoveLinks: true, url: "/images", headers: { 'X-CSRF-Token': $('meta[name="csrf-token"]').attr('content') } }); }); </script>
Đây là màn hình upload ảnhVí dụ trên chỉ là cơ bản về cách sử dụng dropzone. Tìm hiểu thêm về các option, các function dropzone có thể xem trên trang web của dropzone http://www.dropzonejs.com/