- Documentation
- Server Integrations
- PHP
- Node.JS
- Java
- Django
- Flask
- Pyramid
- Ruby on Rails
- .NET Core
- .NET Core Framework
- .NET WebForms
- .NET WebForms MVC
Ruby on Rails
Video Upload
The following code example illustrates how to handle video upload on your server using Ruby as a server-side language. For step by step explanation of the upload flow see video upload concept.
Frontend
The main index page.
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <!-- Include external CSS. --> <link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.4.0/css/font-awesome.min.css" rel="stylesheet" type="text/css" /> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.25.0/codemirror.min.css"> <!-- Include Editor style. --> <link href="https://cdn.jsdelivr.net/npm/[email protected]/css/froala_editor.pkgd.min.css" rel="stylesheet" type="text/css" /> <link href="https://cdn.jsdelivr.net/npm/[email protected]/css/froala_style.min.css" rel="stylesheet" type="text/css" /> </head> <body> <!-- Include external JS libs. --> <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script> <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.25.0/codemirror.min.js"></script> <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.25.0/mode/xml/xml.min.js"></script> <!-- Include Editor JS files. --> <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/[email protected]//js/froala_editor.pkgd.min.js"></script> <div class="sample"> <h2>Video upload example.</h2> <form> <textarea id="edit" name="content"></textarea> </form> </div> <!-- Initialize the editor. --> <script> $(function() { $('#edit').froalaEditor({ // Set the video upload URL. videoUploadURL: '/upload_video', videoUploadParams: { id: 'my_editor' } }) }); </script> </body> </html>
Backend
upload_controller.rb
file will manage the upload part. It has basic video format validations this can be easily extended.
The uploads directory will be automatically created if it dose not exist under public/uploads/files
After processing the uploaded video, if it passes the validation, the server will respond with a JSON object containing a link to the uploaded file.
E.g.: {"link":"http://server_address/download_file/name_of_file"}
.
class UploadController < ActionController::Base VIDEO_EXT = [".mp4", ".webm", ".ogg"] def upload_video if params[:file] FileUtils::mkdir_p(Rails.root.join("public/uploads/files")) ext = File.extname(params[:file].original_filename) ext = video_validation(ext) file_name = "#{SecureRandom.urlsafe_base64}#{ext}" path = Rails.root.join("public/uploads/files/", file_name) File.open(path, "wb") {|f| f.write(params[:file].read)} view_file = Rails.root.join("/download_file/", file_name).to_s render :json => {:link => view_file}.to_json else render :text => {:link => nil}.to_json end end def video_validation(ext) raise "Not allowed" unless VIDEO_EXT.include?(ext) end def access_file if File.exists?(Rails.root.join("public", "uploads", "files", params[:name])) send_data File.read(Rails.root.join("public", "uploads", "files", params[:name])), :disposition => "attachment" else render :nothing => true end end end
routes.rb
file will manage the routing part.
Inside this file you need to define the routes for the POST video upload and the GET uploaded video requests
Rails.application.routes.draw do # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html post "/upload_video" => "upload#upload_video", :as => :upload_video get "/download_file/:name" => "upload#access_file", :as => :upload_access_file, :name => /.*/