daveismyname / laravel-dropbox
Requires
- guzzlehttp/guzzle: ^6|^7
- illuminate/support: ^5.5|^5.6|^5.7|^5.8|^6.0|^7.0|^8.0|^9.0|^10.0|^11.0
README
社区
存在一个 Discord 社区。 https://discord.gg/VYau8hgwrm 如需快速帮助,请在合适的频道提问。
简介
一个用于操作 Dropbox v2 API 的 Laravel 包。
Dropbox API 文档可在以下地址找到: https://www.dropbox.com/developers/documentation/http/documentation
应用注册
要使用 Dropbox API,需要在 https://www.dropbox.com/developers/apps 创建应用。
创建一个新应用,选择 Dropbox API 或 Dropbox Business API。接下来选择所需的访问类型,无论是应用文件夹(用于隔离到单个文件夹)还是完整的 Dropbox。
接下来,将 APP 密钥和 App 密码复制并粘贴到您的 .env 文件中
DROPBOX_CLIENT_ID=
DROPBOX_SECRET_ID=
现在输入您想要的重定向 URL。这是您的应用程序将用于连接 Dropbox API 的 URL。
一个常见的 URL 是 https://domain.com/dropbox/connect
安装
通过 Composer
composer require dcblogdev/laravel-dropbox
配置
您可以使用以下命令发布配置文件
php artisan vendor:publish --provider="Dcblogdev\Dropbox\DropboxServiceProvider" --tag="config"
发布后,config/dropbox.php 配置文件包含,请确保发布此文件,并将作用域更改为与 Dropbox 应用中的作用域匹配,在 Dropbox 应用控制台中。
<?php return [ /* * set the client id */ 'clientId' => env('DROPBOX_CLIENT_ID'), /* * set the client secret */ 'clientSecret' => env('DROPBOX_SECRET_ID'), /* * Set the url to trigger the oauth process this url should call return Dropbox::connect(); */ 'redirectUri' => env('DROPBOX_OAUTH_URL'), /* * Set the url to redirecto once authenticated; */ 'landingUri' => env('DROPBOX_LANDING_URL', '/'), /** * Set access token, when set will bypass the oauth2 process */ 'accessToken' => env('DROPBOX_ACCESS_TOKEN', ''), /** * Set access type, options are offline and online * Offline - will return a short-lived access_token and a long-lived refresh_token that can be used to request a new short-lived access token as long as a user's approval remains valid. * * Online - will return a short-lived access_token */ 'accessType' => env('DROPBOX_ACCESS_TYPE', 'offline'), /* set the scopes to be used */ 'scopes' => 'account_info.read files.metadata.write files.metadata.read files.content.write files.content.read', ];
迁移
您可以使用以下命令发布迁移
php artisan vendor:publish --provider="Dcblogdev\Dropbox\DropboxServiceProvider" --tag="migrations" 迁移发布后,您可以通过运行迁移来创建 tokens 表
php artisan migrate
.ENV 配置 确保您已在 .env 文件中设置了以下内容
DROPBOX_CLIENT_ID=
DROPBOX_SECRET_ID=
DROPBOX_OAUTH_URL=https://domain.com/dropbox/connect
DROPBOX_LANDING_URL=https://domain.com/dropbox
DROPBOX_ACCESS_TYPE=offline
绕过 OAuth2 您可以通过在 Dropbox 应用中生成访问令牌并在 .env 文件中输入它来绕过 OAuth2 流程
DROPBOX_ACCESS_TOKEN=
用法
注意,此包期望用户已登录。
注意:以下示例假设使用 OAuth2 进行身份验证,而不是在 .env 中直接设置访问令牌。
如果直接设置访问代码,不要依赖 Dropbox::getAccessToken()
路由示例
Route::group(['middleware' => ['web', 'auth']], function(){ Route::get('dropbox', function(){ if (! Dropbox::isConnected()) { return redirect(env('DROPBOX_OAUTH_URL')); } else { //display your details return Dropbox::post('users/get_current_account'); } }); Route::get('dropbox/connect', function(){ return Dropbox::connect(); }); Route::get('dropbox/disconnect', function(){ return Dropbox::disconnect('app/dropbox'); }); });
或使用中间件路由,如果用户没有 graph 令牌,则自动重定向到进行身份验证
Route::group(['middleware' => ['web', 'DropboxAuthenticated']], function(){ Route::get('dropbox', function(){ return Dropbox::post('users/get_current_account'); }); }); Route::get('dropbox/connect', function(){ return Dropbox::connect(); }); Route::get('dropbox/disconnect', function(){ return Dropbox::disconnect('app/dropbox'); });
一旦认证成功,您可以使用以下动词调用 Dropbox::
Dropbox::get($endpoint, $array = [], $headers = [], $useToken = true) Dropbox::post($endpoint, $array = [], $headers = [], $useToken = true) Dropbox::put($endpoint, $array = [], $headers = [], $useToken = true) Dropbox::patch($endpoint, $array = [], $headers = [], $useToken = true) Dropbox::delete($endpoint, $array = [], $headers = [], $useToken = true)
$array 不是始终必需的,其需求由调用的端点决定,请参阅 API 文档以获取更多详细信息。
当使用时,$headers 是可选的,可以传递额外的头信息。
当设置为 true 时,$useToken 是可选的,将使用授权头,默认为 true。
这期望传递 API 端点,URL https://api.dropboxapi.com/2/ 已提供,应仅使用此 URL 之后的内容,例如
Dropbox::post('users/get_current_account')
中间件
要限制路由只允许认证用户访问,有一个名为 DropboxAuthenticated 的中间件路由。
将 DropboxAuthenticated 添加到路由以确保用户已认证
Route::group(['middleware' => ['web', 'DropboxAuthenticated'], function()
要访问令牌模型,请参考此ORM模型
use Dcblogdev\Dropbox\Models\DropboxToken;
文件
此包提供了一种处理文件的干净方式。
要处理文件,首先调用 ->files(),然后调用方法。
导入命名空间
use Dcblogdev\Dropbox\Facades\Dropbox;
列出内容
列出指定路径下的文件和文件夹
Dropbox::files()->listContents($path = '')
列出内容继续
使用前一个listContents调用的游标分页访问下一组文件夹/文件。
Dropbox::files()->listContentsContinue($cursor = '')
删除文件夹/文件 将路径传递给文件/文件夹,当删除文件夹时,所有子项将被删除。
Dropbox::files()->delete($path)
创建文件夹 将要创建的文件夹的路径传递过去。
Dropbox::files()->createFolder($path)
搜索文件 每个单词都将用于搜索文件。
Dropbox::files()->search($query)
上传文件 通过传递文件夹路径和文件名将文件上传到Dropbox。注意,此方法仅支持最多150MB的上传。
Dropbox::files()->upload($path, $file)
下载文件 通过传递包含文件的文件夹路径从Dropbox下载文件。
Dropbox::files()->download($path)
移动文件夹/文件 移动操作接受4个参数
$fromPath - 提供现有文件夹/文件的路径 $toPath - 提供现有文件夹/文件的新路径,必须以/开头 $autoRename - 如果存在冲突,让Dropbox服务器尝试自动重命名文件以避免冲突。此字段的默认值为false。$allowOwnershipTransfer - 允许所有者移动,即使这会导致移动内容的所有权转移。此选项不适用于复制。此字段的默认值为false。
Dropbox::files()->move($fromPath, $toPath, $autoRename = false, $allowOwnershipTransfer = false);
变更日志
请参阅变更日志以获取有关最近更改的更多信息。
贡献
欢迎贡献,并将获得充分认可。
贡献可以通过Github上的Pull Requests接受。
拉取请求
-
记录任何行为变化 - 确保readme.md和其他相关文档保持最新。
-
考虑我们的发布周期 - 我们试图遵循SemVer v2.0.0。随机破坏公共API不是一种选择。
-
每个拉取请求一个功能 - 如果你想做更多的事情,请发送多个拉取请求。
安全
如果您发现任何安全相关的问题,请通过dave@dcblog.dev发送电子邮件,而不是使用问题跟踪器。
许可证
许可证。有关更多信息,请参阅许可证文件。