How to implement Dropbox v2 API in your Php Applications

How to implement Dropbox v2 API in your Php Applications cover image

Spatie comes up with a very handy package called Dropbox-API. It is a minimal PHP implementation of the Dropbox API v2. It contains only the methods needed for our flysystem-dropbox adapter.

Installation

You can install the package via composer by running this command:

composer require spatie/dropbox-api

Usage

The first thing you need to do is get an authorization token at Dropbox. Unlike other companies, Dropbox has made this very easy. You can just generate a token in the App Console for any Dropbox API app. You’ll find more info at the Dropbox Developer Blog.

With an authorization token you can instantiate a Spatie\Dropbox\Client.

$client = new Spatie\Dropbox\Client($authorizationToken);

or alternatively, you can implement Spatie\Dropbox\TokenProvider which will provide the access-token from its TokenProvider->getToken(): string method.

If you use oauth2 to authenticate and to acquire refresh-tokens and access-tokens, (like thephpleague/oauth2-client), you can create an adapter that internally takes care of token-expiration and refreshing tokens, and at runtime will supply the access-token via the TokenProvider->getToken(): string method.

(Dropbox announced they will be moving to short-lived access_tokens in 2021).

// implements Spatie\Dropbox\TokenProvider
$tokenProvider = new AutoRefreshingDropBoxTokenService($refreshToken);
$client = new Spatie\Dropbox\Client($tokenProvider);

or alternatively, you can authenticate as an App using your App Key & Secret.

$client = new Spatie\Dropbox\Client([$appKey, $appSecret]);

If you only need to access the public endpoints you can instantiate Spatie\Dropbox\Client without any arguments.

$client = new Spatie\Dropbox\Client();

Dropbox Endpoints

Look in the source code of Spatie\Dropbox\Client to discover the methods you can use.

Here’s an example:

$content = 'hello, world';
$client->upload('/dropboxpath/filename.txt', $content, $mode='add');

$from = '/dropboxpath/somefile.txt';
$to = '/dropboxpath/archive/somefile.txt';
$client->move($from, $to);

If the destination filename already exists, dropbox will throw an Exception with to/conflict/file/.

The upload() and move() methods have an optional extra autorename argument to try and let dropbox automatically rename the file if there is such a conflict.

Here’s an example:

$from = '/dropboxpath/somefile.txt';
$to = '/dropboxpath/archive/somefile.txt';
$client->move($from, $to, $autorename=true);
// with autorename results in 'somefile (1).txt'

If you do not find your favorite method, you can directly use the contentEndpointRequest and rpcEndpointRequest functions.

public function contentEndpointRequest(string $endpoint, array $arguments, $body): ResponseInterface

public function rpcEndpointRequest(string $endpoint, array $parameters): array

Here’s an example:

$client->rpcEndpointRequest('search', ['path' => '', 'query' => 'bat cave']);

If you need to change the subdomain of the endpoint URL used in the API request, you can prefix the endpoint path with a subdomain.

Here’s an example:

$client->rpcEndpointRequest('content::files/get_thumbnail_batch', $parameters);

This package is very handy for the implementation of Dropbox API, For more details & source code you can visit its complete documentation on Github.

Written by

Rizwan Aslam

Founder and CEO of CodeBrisk, with years of experience building web applications with Laravel and leading a team of expert developers.

More about Rizwan
Book a free call
Book a free call with CodeBrisk Open in new tab