upload video sử dụng Ziggeo
Cài đặt Gemfile gem "Ziggeo" gem "dotenv-rails" gem "devise" Ziggeo là một thư viện cho phép bạn dễ dàng làm việc với API của Ziggeo. Lưu ý rằng tên của nó bắt đầu với một chữ hoa "Z"! Dotenv sẽ được sử dụng để lưu trữ các biến môi trường để phát triển. Chạy các lệnh dưới đây: bundle ...
Cài đặt Gemfile
gem "Ziggeo" gem "dotenv-rails" gem "devise"
Ziggeo là một thư viện cho phép bạn dễ dàng làm việc với API của Ziggeo. Lưu ý rằng tên của nó bắt đầu với một chữ hoa "Z"! Dotenv sẽ được sử dụng để lưu trữ các biến môi trường để phát triển. Chạy các lệnh dưới đây:
bundle install rails generate devise:install rails generate devise User rails generate model Video rails generate controller Videos rails db:migrate
config/routes.rb
resources :videos
** Đăng ký tài khoản** Các bạn vào https://ziggeo.com/signup để đăng ký tài khoản Sau khi đăng ký Ziggeo sẽ cung cấp cho bạn:
ZIGGEO_APP_TOKEN: "ea65185f0dde00397d55569028d67227" ZIGGEO_PRIVATE_KEY: "9f939381106e572894ee4b41c41641de" ZIGGEO_ENCRYPTION_KEY: "1cce2ff28051521ae0260496c7029e79"
- Thêm thuộc tính cho bảng users
rails g migration add_uid_to_users uid:string
+database db/migrate/20170228093212_devise_create_users.rb
class DeviseCreateUsers < ActiveRecord::Migration[5.0] def change create_table :users do |t| ## Database authenticatable t.string :email, null: false, default: "" t.string :encrypted_password, null: false, default: "" ## Recoverable t.string :reset_password_token t.datetime :reset_password_sent_at ## Rememberable t.datetime :remember_created_at ## Trackable t.integer :sign_in_count, default: 0, null: false t.datetime :current_sign_in_at t.datetime :last_sign_in_at t.string :current_sign_in_ip t.string :last_sign_in_ip ## Confirmable # t.string :confirmation_token # t.datetime :confirmed_at # t.datetime :confirmation_sent_at # t.string :unconfirmed_email # Only if using reconfirmable ## Lockable # t.integer :failed_attempts, default: 0, null: false # Only if lock strategy is :failed_attempts # t.string :unlock_token # Only if unlock strategy is :email or :both # t.datetime :locked_at t.timestamps null: false end add_index :users, :email, unique: true add_index :users, :reset_password_token, unique: true # add_index :users, :confirmation_token, unique: true # add_index :users, :unlock_token, unique: true end end
db/migrate/20170228093259_add_uid_to_users.rb
class AddUidToUsers < ActiveRecord::Migration[5.0] def change add_column :users, :uid, :string end end
db/migrate/20170301013112_create_videos.rb
class CreateVideos < ActiveRecord::Migration[5.0] def change create_table :videos do |t| t.belongs_to :user, foreign_key: true t.string :uid t.decimal :duration t.datetime :ziggeo_created_at t.boolean :approved t.timestamps end end end
- controller controller/videos_controller.rb
class VideosController < ApplicationController def index ziggeo = Ziggeo.new ENV["ZIGGEO_APP_TOKEN"], ENV["ZIGGEO_PRIVATE_KEY"], ENV["ZIGGEO_ENCRYPTION_KEY"] @videos = ziggeo.videos.index tags: current_user.uid end def destroy video = current_user.videos.find_by(uid: params[:id]) if video ziggeo = Ziggeo.new(ENV['ZIGGEO_KEY'], ENV['ZIGGEO_SECRET'], ENV['ZIGGEO_ENCRYPTION']) ziggeo.videos.delete(video.uid) flash[:success] = 'Video removed! It may take some time to reflect changes on the website.' else flash[:warning] = 'Cannot find such video...' end redirect_to root_path end end
- View views/videos/index.html.erb
<h1>Videos</h1> <%= link_to 'Add video', new_video_path %> <%= render partial: 'video', collection: @videos, as: :video %>
views/videos/_video.html.erb
<div class="card"> <div class="card-block"> <ziggeo ziggeo-video='<%= video['token'] %>' ziggeo-awidth="320" ziggeo-height="240" ziggeo-popup></ziggeo> </div> </div>
views/videos/new.html.erb
<ziggeo ziggeo-limit="60" ziggeo-awidth="320" ziggeo-height="240" ziggeo-perms="allowupload" ziggeo-tags="<%= current_user.uid %>"></ziggeo>
- routes config/routes.rb
root "video#index" resources :videos
- assets/javascripts/videos.coffee
jQuery(document).on 'turbolinks:load', -> ZiggeoApi.Events.on "upload_progress", ( uploaded, total, data ) -> $('progress').removeClass('hidden-xs-up').attr 'value', (uploaded / total) * 100
Link tham khảo: https://www.sitepoint.com/video-uploads-with-rails-and-ziggeo/