- 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
Image Upload
The following code example illustrates how to handle image upload on your server using Ruby as a server-side language. For step by step explanation of the upload flow see image upload concept.
Frontend
The main index page.
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<!-- Include Editor style. -->
<link href="https://cdn.jsdelivr.net/npm/[email protected]/css/froala_editor.pkgd.min.css" rel="stylesheet" type="text/css" />
</head>
<body>
<!-- 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>Image upload example.</h2>
<form>
<textarea id="edit" name="content"></textarea>
</form>
</div>
<!-- Initialize the editor. -->
<script>
new FroalaEditor('#edit', {
// Set the image upload URL.
imageUploadURL: '/upload_image',
imageUploadParams: {
id: 'my_editor'
}
})
</script>
</body>
</html>
Backend
upload_controller.rb
file will manage the upload part. It has basic image 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 image, 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
IMAGE_EXT = [".gif", ".jpeg", ".jpg", ".png", ".svg"]
def upload_image
if params[:file]
FileUtils::mkdir_p(Rails.root.join("public/uploads/files"))
ext = File.extname(params[:file].original_filename)
ext = image_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 image_validation(ext)
raise "Not allowed" unless IMAGE_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 image upload and the GET uploaded image requests
Rails.application.routes.draw do
# For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
post "/upload_image" => "upload#upload_image", :as => :upload_image
get "/download_file/:name" => "upload#access_file", :as => :upload_access_file, :name => /.*/