3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

LaravelからDropboxの操作を行う

Posted at

はじめに

Laravelのストレージ操作はFlysystemという抽象ファイルシステムを使用しており、ローカルのファイルシステムやAmazon S3、Rackspaceといったクラウドストレージを操作できるドライバが提供されています。

今回はここにDropboxを操作する設定を加えていきたいと思います。
(Laravel 5.1と5.5で動作することを確認済み)

Dropbox側の操作

アプリの作成開始

App Consoleから、「My Apps」を開き、「Create app」をクリックします。

dropbox_my_apps.png

作成するアプリの設定

必要な情報を入力して、アプリの作成をします。
今回はDropbox上の指定フォルダのみを操作するアプリとして作成してみました。

dropbox_create_new_app.png

accessTokenの取得

アプリが作成できたら、設定画面に自動遷移します。
OAuth2の欄内にある「Generate」をクリックして、作成されたaccessTokenをコピーしておいてください。

dropbox_oauth2.png

accessTokenを作成すると、Dropboxの「アプリ」フォルダの下に、対応するフォルダが自動で作成されるようです。
(確認メールやらスマホアプリの通知やらが一斉に飛んできてビクッとしました)

Laravel側の操作

.envファイルに取得したaccessTokenを記述

/.env
DROPBOX_ACCESS_TOKEN=hogehoge

php artisan config:clearを忘れずに。

必要なパッケージの取得

コチラのドキュメントでは、spatie/flysystem-dropboxを使うような記述になっていますが、どうやらv1のAPIを使用しているようで、現在は使えません。

v2に対応している、コチラを使用します。

$ composer require srmklive/flysystem-dropbox-v2

ServiceProviderを作成

php artisan make:provider DropboxFilesystemServiceProvider

ServiceProviderの中身を実装

/app/Providers/DropboxFilesystemServiceProvider.php
<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;

use Storage;
use League\Flysystem\Filesystem;
use Srmklive\Dropbox\Client\DropboxClient;
use Srmklive\Dropbox\Adapter\DropboxAdapter;

class DropboxFilesystemServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap the application services.
     *
     * @return void
     */
    public function boot()
    {
        Storage::extend('dropbox', function ($app, $config) {
            return new Filesystem(new DropboxAdapter(new DropboxClient($config['accessToken'])));
        });
    }

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

Filesystemの設定に追記

/config/filesystems.php
'disks' => [
    // 以下を追記
    'dropbox' => [
        'driver' => 'dropbox',
        'accessToken' => env('DROPBOX_ACCESS_TOKEN'),
    ],
],

ServiceProviderを登録

/config/app.php
'providers' => [
    App\Providers\DropboxFilesystemServiceProvider::class,
],

動作確認

作成されたフォルダに適当なファイルを保存して...

// ファイル一覧の取得
$filepaths = \Storage::disk('dropbox')->allFiles('/');

foreach ($filepaths as $filepath) {
    \Log::debug($filepath);
}

ログにファイルの一覧が出力されていれば完了です。

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?