12/08/2018, 14:57

Tìm hiểu package Cloudinary trong Laravel

Xin chào mọi người, trong thời gian ra mắt Laravel 5.4 với rất nhiều điều hay ho thì mình cũng thử làm một vài sample liên quan tới nó. Ví dụ như là mình tạo một trang web bán hàng, ở đây trang web lại sử dụng khá nhiều hình ảnh nên mình tìm hiểu một nơi giúp mình lưu trữ đống ảnh đó và lấy ra một ...

Xin chào mọi người, trong thời gian ra mắt Laravel 5.4 với rất nhiều điều hay ho thì mình cũng thử làm một vài sample liên quan tới nó. Ví dụ như là mình tạo một trang web bán hàng, ở đây trang web lại sử dụng khá nhiều hình ảnh nên mình tìm hiểu một nơi giúp mình lưu trữ đống ảnh đó và lấy ra một cách thuận tiện. Và cuối cùng thì mình cũng tìm được trợ thủ đắc lực - Cloudinary.

Giới thiệu

  1. Cloudinary là một giải pháp Software-as-a-Service(SaaS) để quản lý các nội dung trên web hay ứng dụng di động của bạn trên cloud. Nói cách đơn giản, nhà cung cấp phần mềm không bán sản phẩm phần mềm mà bán dịch vụ dựa trên phần mềm đó. Thông thường, khi muốn sử dụng một phần mềm, chúng ta sẽ phải mua hoặc tải vài chục đến vài trăm MB bộ cài phần mềm sau đó cài lên máy của mình. Điều này có thể gây rất nhiều rắc rối như tốn bộ nhớ, RAM yếu, cấu hình không tương thích... Còn với SaaS, bạn chỉ cần 1 máy tính nối mạng, cài một ứng dụng nhỏ làm giao diện phần mềm (hoặc không phải cài gì) là có thể sử dụng dịch vụ.
  2. Với Cloudinary bạn có thể dễ dàng tải hình ảnh lên cloud, tự động thực hiện các thao tác với hình ảnh mà không cần cài đặt bất kỳ phần mềm phức tạp nào. Tất cả các hình ảnh của bạn sau đó được phân phối liền mạch thông qua một CDN nhanh, tối ưu hóa tốt nhất. Cloudinary cung cấp các API toàn diện, các khả năng quản trị, dễ dàng tích hợp với các ứng dụng web và điện thoại di động hiện có.

Dưới đây mình sẽ làm một ví dụ demo thực hiện các thao tác với ảnh sử dụng Cloudinary. Cùng làm với mình nhé!

Cài đặt

Sau khi bạn tạo project rồi thì hãy gõ lệnh sau:

composer require jrm2k6/cloudder:0.4.*

Khi cài đặt hoàn tất, bạn có thể kiểm tra trong composer.json:

 "require": {
        "php": ">=5.6.4",
        "jrm2k6/cloudder": "0.4.*",
        "laravel/framework": "5.4.*",
        "laravel/tinker": "~1.0"
    },

Nếu thấy có "jrm2k6/cloudder": "0.4.*", thì coi như bạn đã cài đặt thành công.

Cấu hình

Nếu các bạn chưa có tài khoản thì hãy vào link này để đăng kí: https://cloudinary.com Đăng kí xong bạn sẽ được chuyển đến trang dashboard, tại đó bạn sẽ được nhìn thấy Account Details của mình

Sau đó bạn vào file .env trong project của bạn rồi thêm những dòng dưới đây

CLOUDINARY_API_KEY=`your key`
CLOUDINARY_API_SECRET=`your secret`
CLOUDINARY_CLOUD_NAME=`your cloud name`

Trong đó, your key, your secret, your cloud name sẽ là những thứ có trong account details của bạn, bạn hãy cop nó vào trong file .env. Để sử dụng được Cloudinary, thì bạn cần thêm vào file config/app.php như sau:

'providers' => array(
  JDCloudderCloudderServiceProvider::class,
);

'aliases' => array(
  'Cloudder' => JDCloudderFacadesCloudder::class,
);

Chạy php artisan vendor:publish --provider="JDCloudderCloudderServiceProvider" Xong, giờ đến lúc sử dụng nó!

Sử dụng

upload()

Cloudder::upload($filename, $publicId, array $options, array $tags);

Ở đây:

  • $$ilename: tên bức ảnh mà bạn muốn upload lên vd profile.jpg
  • publicId: tất cả các ảnh upload lên Cloudinary thì đều phải là duy nhất thì mới có thể lấy chính xác được từng bức ảnh, bởi vậy chúng sẽ có 1 id, bạn có thể tự định nghĩa đó hoặc để cho Cloudinary random id. Nếu bạn tạo folder trên Cloudinary là uploads và bạn muốn lưu ảnh vào đây thì publicId sẽ là uploads/profile.jpg
  • $$ptions: đây là các tùy chọn cho việc upload ảnh, giả dụ như: array("awidth"=>260, "height"=>200, "gravity"=>"north", "crop"=>"crop")
  • $$ags: tag cho bức ảnh Hàm này sẽ trả về CloudinaryWrapper.

uploadVideo()

Cloudder::uploadVideo($filename, $publicId, array $options, array $tags);

Các tham số tương tự như upload ảnh

getPublicId()

Cloudder::getPublicId()

Trả về public Id của ảnh/video mà bạn đã upload lên lần cuối cùng

getResult()

Cloudder::getResult()

Trả về kết quả lần cuối upload như sau:

array:16 [▼
  "public_id" => 
  "version" =>
  "signature" => 
  "awidth" => 
  "height" => 
  "format" => 
  "resource_type" =>
  "created_at" => 
  "tags" => []
  "bytes" => 
  "type" => 
  "etag" => 
  "url" => 
  "secure_url" => 
  "overwritten" => 
  "original_filename" =>
]

show() + secureShow()

Cloudder::show($publicId, array $options)
Cloudder::secureShow($publicId, array $options)

với

  • $$ublicId: public id sẽ được hiển thị
  • $$ptions: tùy chọn show ảnh trả về url của ảnh trên Cloudinary.

showPrivateUrl()

Cloudder::showPrivateUrl($publicId, $format, array $options)

với:

  • $$ublicId: hiển thị public Id
  • $$ormat: đuôi của ảnh như jpg, png...
  • $$ptions: tùy chọn show ảnh cũng trả về url của ảnh, nhưng mặc định chỉ hiển thị trong 1h

rename()

Cloudder::rename($publicId, $toPublicId, array $options)
  • $$ublicId: public Id của ảnh bạn muốn đổi tên
  • $$oPublicId: public Id mới
  • $$ptions: tùy chọn thêm cho ảnh trả về ảnh ban đầu với public id mới.

destroyImage()

Cloudder::destroyImage($publicId, array $options)
  • $$ublicIds: mảng các id, xác định những ảnh mà bạn muốn xóa
  • $$ptions: tùy chọn xóa ảnh

Demo

Mình xin demo như sau: Ở view profile.blade.php

<form method="POST" class="form-horizontal" enctype="multipart/form-data" action="/profile">
    {{csrf_field()}}
    <div class="text-center">
        <h6> Choose image </h6>
        <input type="file" name="avatar" class="text-center center-block well well-sm">
    </div>
 </form>

Ở routes/web.php:

Route::post('/profile', 'UserController@profile');

Ở UserController.php:

<?php

namespace AppHttpControllers;

use IlluminateHttpRequest;
use AppHttpControllersController;
use Cloudder;

class UserController extends Controller
{
    public function profile(Request $request)
    {
        if ($request->hasFile('avatar')) {
            //get name image
            $filename = $request->avatar;
            //upload image
            Cloudder::upload($filename, 'uploads/' . $filename);
         }
         //get url image on Cloudinary
         return Cloudder::show('uploads/'. $filename);
    }
 }

Bạn hãy vào trong media library của bạn, kiểu tra xem trong folder uploads đã có ảnh mà bạn upload lên hay chưa nhé! Mình xin kết thúc bài tìm hiểu ở đây, vì tìm hiểu bài trong thời gian ngắn nên chắc chắn còn rất nhiều thiếu sót. Mong các bạn thông cảm !

Tham khảo: http://cloudinary.com/documentation/php_integration https://packagist.org/packages/jrm2k6/cloudder

0