Pham Van Nhat

Web Developer

Hướng dẫn upload image lên dropbox với Laravel 5.6

Trong quá trình sử dụng ứng dụng của bạn, bạn muốn những tệp hình ảnh hay file của mình được lưu trữ thông qua bên thứ 3 như S3, Dropbox.... rất nhiều :))) thì hôm nay mình sẽ hướng dẫn các bạn làm sao để upload image lên Dropbox và cách lấy ra như thế nào, chia sẽ những vấn đề lây quây mất thời gian mà mình đã từng trải qua. Vậy nhé, bắt đầu thôi nào :v

Việc đầu tiên cần làm là chúng ta phải tạo app Dropbox

Để upload image lên Dropbox trước hết đầu tiên chúng cần làm là setup cái package spatie/flysystem-dropbox. Các bạn cũng có thể đọc hướng dẫn từ trang document của Laravel, cũng rất dễ hiểu :D

composer require spatie/flysystem-dropbox
Bước 2, tạo 1 service provider

<?php

namespace App\Providers;

use Storage;
use League\Flysystem\Filesystem;
use Illuminate\Support\ServiceProvider;
use Spatie\Dropbox\Client as DropboxClient;
use Spatie\FlysystemDropbox\DropboxAdapter;


class DropboxServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap services.
     *
     * @return void
     */
    public function boot()
    {
        Storage::extend('dropbox', function ($app, $config) {
            $client = new DropboxClient(
              config('filesystems.disks.dropbox.dropbox_token')
            );

            return new Filesystem(new DropboxAdapter($client));
        });
    }

    /**
     * Register services.
     *
     * @return void
     */
    public function register()
    {
        //
    }
}

Đừng quên vào file config/app.php thêm App\Providers\DropboxServiceProvider::class vào array providers nhé :D

Bước 3, chúng ta vào config/filesystems.php thêm driver dropbox:

'disks' => [
   //your code
        'dropbox' => [
          'driver' => 'dropbox',
          'dropbox_token' => env('DROPBOX_TOKEN'),
        ],
    ],

và vào file .env thêm

DROPBOX_TOKEN=Your_access_token
DROPBOX_TOKEN lấy value ở vị trí ô đỏ mà mình đã vùng lại(Generated access token)

Bước 4

- Tạo 1 view add.blade.php

<form action="" method="post" enctype="multipart/form-data">
  {{ csrf_field() }}
  <input type="file" name="image">
  <button>Push</button>
</form>

- Tạo controller

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Storage;

class DemoController extends Controller
{
    function __construct() {

    }

    function index() {
      return view('welcome');
    }

    function create() {
      return view('add');
    }

    function store(Request $request) {
      $push_to_dropbox = Storage::disk('dropbox')->put('demo', $request->file('image')); //push file vo thu muc demo
      
      // $push_to_dropbox sẽ trả về 1 đường dẫn file ảnh ví dụ 'demo/czMzXfE5Rtv7WqzcZMk2og0ShXPBpE8uNtxa9QPz.jpeg'

      // Lấy hình ảnh từ dropbox ra
      $get_image = Storage::disk('dropbox')->get($push_to_dropbox);

      return view('index', ['image' => $get_image]);
    }
}
- Trong routes/web.php

Route::get('/upload-to-dropbox', 'DemoController@create');
Route::post('/upload-to-dropbox', 'DemoController@store');
sau khi dd($get_image) sẽ có trường hợp bị như hình dưới:

thì để hiển thị hình ảnh chỉ cần trong view chúng ta dùng

<img src="data:image/jpeg;base64,{{ base64_encode($image) }}">
Oke vậy là xong phần upload hình ảnh lên dropbox, nếu như có vấn đề gì khó hiểu hoặc chưa giải quyết được hãy comment với mình, nhé :D

https://refer.kashtree.com/register.php?referral=butrentron