12/08/2018, 15:10

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/

0