Đối với một số dự án, bạn cần phải sử dụng Google Drive (với tài khoản @gmail.com cá nhân hoặc tài khoản G Suite) làm nhà cung cấp bộ nhớ trong các dự án Laravel.

Trong bài đăng này, tôi sẽ hướng dẫn bạn cách thiết lập Google Drive làm storage thông qua filesystem của Framework Laravel.

Cài đặt Google Drive trong Laravel

Google đã cung cấp API cho chúng ta tương tác:

https://developers.google.com/drive/api/v3/manage-uploads

Nhưng để chúng ta có thể cài đặt nhanh chóng và dễ dàng sử dụng, mình sẽ dùng thư viện sau để hỗ trợ:

https://github.com/masbug/flysystem-google-drive-ext

Nếu dự án của bạn sử dụng Flysystem V2/V3 hoặc Laravel >= 9.x.x thì bạn hãy sử dụng lệnh sau:

composer require masbug/flysystem-google-drive-ext

Nếu dự án của bạn sử dụng Flysystem V1 hoặc Laravel <= 8.x.x thì bạn hãy sử dụng lệnh sau:

composer require masbug/flysystem-google-drive-ext:"^1.0.0"

Sau khi, cài đặt thư viện hoàn thành, chúng ta sẽ dùng lệnh sau để tạo Service Providers cho Google Drive:

php artisan make:provider GoogleServiceProvider

Tiếp theo, mở GoogleServiceProvider.php nằm trong thư mục app/Providers và chỉnh sửa như sau:

<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\Storage;

class GoogleServiceProvider extends ServiceProvider
{
    /**
     * Register services.
     *
     * @return void
     */
    public function register()
    {
        //
    }

    /**
     * Bootstrap services.
     *
     * @return void
     */
    public function boot()
    {
        try {
            Storage::extend('google', function($app, $config) {
                $options = [];
                if (!empty($config['teamDriveId'] ?? null)) {
                    $options['teamDriveId'] = $config['teamDriveId'];
                }
                $client = new \Google\Client();

                $client->setClientId($config['clientId']);
                $client->setClientSecret($config['clientSecret']);
                $client->refreshToken($config['refreshToken']);

                $service = new \Google\Service\Drive($client);
                $adapter = new \Masbug\Flysystem\GoogleDriveAdapter($service, $config['folder'] ?? '/', $options);
                $driver  = new \League\Flysystem\Filesystem($adapter);

                return new \Illuminate\Filesystem\FilesystemAdapter($driver, $adapter);
            });
        } catch(\Exception $e) {
            // your exception handling logic
        }
    }
}

Tiếp tục, mở file config/app.php và đăng kí GoogleServiceProvider như sau:

....
'providers' => [
    ....
    App\Providers\GoogleServiceProvider::class,
],
....

Cuối cùng, chúng ta sẽ đăng kí thông tin Google Drive vào config/filesystems.php như sau:

...
'disks' => [
    ...
    'google' => [
        'driver' => 'google',
        'clientId' => env('GOOGLE_DRIVE_CLIENT_ID'),
        'clientSecret' => env('GOOGLE_DRIVE_CLIENT_SECRET'),
        'refreshToken' => env('GOOGLE_DRIVE_REFRESH_TOKEN'),
        'folder' => env('GOOGLE_DRIVE_FOLDER'),
        //'teamDriveId' => env('GOOGLE_DRIVE_TEAM_DRIVE_ID'),
    ],
    ...
],
...

Google Drive API keys

Để chúng ta có thể lưu trữ được trên Google Drive chúng ta cần có các thông tin như Client ID, Client Secret và Refresh Token. Các bạn có thể tham khảo các hướng dẫn bên dưới:

+ Lấy thông tin Client ID và Client Secret

+ Lấy thông tin Refresh Token

Sau khi có được các thông tin cần thiết, bạn hãy thêm các thông tin đó vào .env như sau:

FILESYSTEM_CLOUD=google
GOOGLE_DRIVE_CLIENT_ID=xxx
GOOGLE_DRIVE_CLIENT_SECRET=xxx
GOOGLE_DRIVE_REFRESH_TOKEN=xxx
GOOGLE_DRIVE_FOLDER=

※Nếu GOOGLE_DRIVE_FOLDER không có giá trị thì mặc định sẽ được upload ở thư mục gốc.

※Nếu GOOGLE_DRIVE_FOLDER là một tên thư mục không tồn tại thì khi upload sẽ tự động tạo ra thư mục đó và upload dữ liệu vào thư mục này.

Trải nghiệm Upload File lên Google Drive trong Laravel

Đầu tiên, bạn mở routes/web.php và thêm route bên dưới:

Route::get('upload-file', function() {
    \Storage::disk('google')->put('google-drive.txt', 'Google Drive As Filesystem In Laravel (ManhDanBlogs)');
    dd('Đã upload file lên google drive thành công!');
});

Tiếp theo, các bạn hãy truy cập vào URL: http://127.0.0.1:8000/upload-file

Như vậy, chúng ta đã upload thành công lên Google Drive để chắc chắn chúng ta hãy truy cập vào Google Drive để kiểm tra:

CÓ THỂ BẠN QUAN TÂM

Laravel Factories, Seeder

Laravel Factories, Seeder

Trong bài viết này, tôi sẽ hướng dẫn các bạn về cách tạo dữ liệu giả trong cơ sở dữ liệu bằng cách sử dụng Laravel Factory và Seed trong Database Seeder. Để tạo model factory, bạn cần chạy lệnh sau...

Laravel Upload File Using Trait

Laravel Upload File Using Trait

Hiện nay, đa số các dự án đều có chức năng upload file, nên tôi đã thử xây dựng một lớp Trait Upload File, để chúng ta dễ dàng sao chép qua các dự án khác để sử dụng, nhằm rút ngắn thời gian phát triể...

Integrating OpenAI in Laravel

Integrating OpenAI in Laravel

OpenAI OpenAI là một phòng thí nghiệm nghiên cứu trí tuệ nhân tạo (AI) của Mỹ bao gồm tổ chức phi lợi nhuận OpenAI Incorporated (OpenAI Inc.) và công ty con hoạt động vì lợi nhuận OpenAI Limited Par...

Send Slack Notifications In Laravel

Send Slack Notifications In Laravel

Slack là gì? Slack là một công cụ giao tiếp tại nơi làm việc, "một nơi duy nhất cho các tin nhắn, công cụ và file." Điều này có nghĩa là Slack là một hệ thống nhắn tin tức thì với nhiều plug-in cho...

Method WhereAny / WhereAll  in Laravel Eloquent

Method WhereAny / WhereAll in Laravel Eloquent

New Laravel 10: Eloquent WhereAny() và WhereAll() Laravel cung cấp cho chúng ta khả năng xây dựng các truy vấn dữ liệu mạnh mẽ với Eloquent ORM, giúp chúng ta có thể xử lý các truy vấn cơ sở dữ li...

Implementing Private User Folders with elFinder in Laravel

Implementing Private User Folders with elFinder in Laravel

elFinder elFinder là một trình quản lý tập tin mã nguồn mở dành cho web, được viết bằng JavaScript sử dụng jQuery UI. elFinder được phát triển dựa trên cảm hứng từ sự tiện lợi và đơn giản của chư...

Laravel One to Many Polymorphic Relationship

Laravel One to Many Polymorphic Relationship

One to Many Polymorphic Model Relationship được sử dụng khi một model thuộc về nhiều model khác trên một model kết hợp duy nhất. Ví dụ: Nếu chúng ta có bảng post và video, cả hai đều cần thêm hệ thống...

Laravel UI Custom Email Verification Template

Laravel UI Custom Email Verification Template

Nếu bạn đang dùng thư viện laravel/ui để làm các chức năng liên quan đến authentication, và trong dự án của bạn, bạn cần thay đổi template email verification thay vì sử dụng template email verificatio...

Export CSV from SQL Server - Import into MySQL with Laravel

Export CSV from SQL Server - Import into MySQL with Laravel

Transfer Database Trong quá trình phát triển và bảo trì dự án, việc di chuyển cơ sở dữ liệu từ hệ thống này sang hệ thống khác là một nhiệm vụ khá phổ biến. Giả sử bạn cần di chuyển dữ liệu từ SQ...

ManhDanBlogs