12/08/2018, 13:20

Sử dụng Cloudinary để quản lý ảnh cho ứng dụng của bạn

Cloudinary là gì? Cloudinary là một cloud-based service, nó cung cấp một giải pháp quản lý hình ảnh bao gồm upload, lưu trữ, thao tác, tối ưu hóa và delivery. Với cloudinary bạn có thể dễ dàng upload ảnh lên cloud, tự động thực thi các thao tác với ảnh một cách thông minh mà không cần phải cài ...

Cloudinary là gì?

Cloudinary là một cloud-based service, nó cung cấp một giải pháp quản lý hình ảnh bao gồm upload, lưu trữ, thao tác, tối ưu hóa và delivery.

Với cloudinary bạn có thể dễ dàng upload ảnh lên cloud, tự động thực thi các thao tác với ảnh một cách thông minh mà không cần phải cài đặt bất kì một phần mềm phức tạp nào khác. Cloudinary cung cấp các APIs toàn diện và màn hình quản lý giúp chúng ta dễ dàng tích hợp vào các trang web và ứng dụng di động.

Những tính năng chính

Cloudinary cung cấp một Ruby Gem để dễ dàng cho việc tương tác với các app viết bởi ngôn ngữ Ruby với một số framwork như là Rails hay Sinatra với các tương tác chính sau:

  • Xây dựng các URL để chuyển đổi và thao tác với hình ảnh
  • Rails view helper cho việc nhúng và thay đổi hình ảnh
  • API wrappers: upload image, quản lý và nhiều thứ khác
  • Upload image trực tiếp từ trình duyệt sử dụng một jQuery plugin.
  • Tích hợp với Active Record
  • CarrierWave plugin
  • Hình ảnh tĩnh đồng bộ với CDN delivery
  • Migration tool

Làm thế nào để sử dụng

Dưới đây mình sẽ giới thiệu cho các bạn hướng dẫn sử dụng cho Rails app. Trước tiên để sử dụng bạn cần có tài khoản cloudinary, nếu chưa có bạn có thể đăng kí tại đây. Sau khi đăng kí thành công bạn nhớ check mail để verification tài khoản của mình nếu không thì sẽ chỉ sử dụng được tài khoản đó trong 1-2 ngày. Cloudinary có bản free và trả phí, tùy thuộc vào nhu cầu mà bạn có thể chọn gói phù hợp cho mình. Bạn có thể xem chi tiết tại đây

1. Cài đặt

Để cài đặt gem cloudinary bạn có thể làm như sau Trong terminal gõ lệnh sau

gem install cloudinary

Hoặc có thể chỉnh Gemfile, thêm gem cloudinary và chạy bundler

gem 'cloudinary'

Nếu bạn sử dụng optional là upload ảnh với Active Record sử dụng CarrierWave thì bạn cần thêm gem carrierwave và bundler lại

gem 'carrierwave'
gem 'cloudinary'

2. Configuration

Để sử dụng cloudinary bạn cần config cloud_name, api_key và api_secret. Những settings này bạn hoàn toàn có thể sử dụng, truyền vào trong mỗi request mà bạn gửi đi hoặc là sử dụng file config cục bộ trong Rails app là cloudinary.yml. Bạn hoàn toàn có thể dowload nó tại trang màn hình quản lý của mình.https://cloudinary.com/console. Dưới đây là file config mẫu:

development:
  cloud_name: ngocnguyen
  api_key: '874837483274837'
  api_secret: a676b67565c6767a6767d6767f676fe1
	...

Bạn cũng có thể xem thêm các option cho config tại đây

3. Upload image

Bây giờ bạn có thể upload image và bất kì file nào từ Ruby code hoặc Ruby on rails server. Bạn có thể sử dụng lệnh sau để update dựa vào các params truyền vào là cloud_name, api_key và api_secret.

auth = {
  cloud_name: "somename",
  api_key:    "1234567890",
  api_secret: "FooBarBaz123"
}

Cloudinary::Uploader.upload("my_picture.jpg", auth)

Image truyền vào có thể là đường dẫn tương đối hoặc một url ảnh bất kì. Nếu bạn sử dụng carrierwave để upload ảnh thì có thể sử dụng như sau: (lưu ý, bạn cần cài đặt gem như trên bước 2, và đặc biệt cần đặt gem carrierwave trước cloudinary) Sau khi generate Uploader, Trong file Uploader bạn cần include Cloudinary::CarrierWave.

class ImageUploader < CarrierWave::Uploader::Base
  include Cloudinary::CarrierWave
	....
end

Trong model cần upload file bạn vẫn config và sử dụng bình thường như đối với carrierwave.

class Post < ActiveRecord::Base
  ...
  mount_uploader :picture, ImageUploader
  ...
end

Tương tự như trong view ta sẽ hiện thì upload file như sau:

= form_for(:post) do |post_form|
  = post_form.hidden_field(:picture_cache)
  = post_form.file_field(:picture)

Trong đó hỗ trợ một trường hidden là :picture_cache để khi mà page reloading hay validation errors thì sẽ không mất image đã upload.

4. Hiển thị và thao tác với image

Mỗi image update sẽ có một public ID, bạn hoàn toàn có thể sử dụng public ID của image để hiện thị ảnh đó. Ví dụ một ảnh có image id là "sample" ta có thể hiện thị ảnh như sau:

cl_image_tag("sample.jpg", :alt => "Sample Image")

Hoặc có thể dùng địa chỉ tuyệt đói của bức ảnh đó để hiện thị như sau

image_tag(
  "http://res.cloudinary.com/demo/image/upload/w_100,h_150,c_fill/sample.jpg",
  :awidth => 100, :height => 150)

Hay đối với Rails app, với một product bạn có thể hiện thị ảnh như sau

<%= image_tag @product.picture.url, alt: @product.name %>

Demo

https://github.com/nguyenngoc2505/cloudinary_demo

Tham khảo

  • Ruby On Rails integration
  • Cloudinary
  • Rails & CarrierWave integration
0