Project page: http://www.google.com/recaptcha/ Repository: https://github.com/google/recaptcha Version: 1.1.1 License: BSD,…
PHP: 操作 Dropbox, 查看,下载,上传,删除等, dropbox php client

项目地址:https://kunalvarma05.github.io/dropbo…
入门
要开始使用Dropbox API,您需要一个应用程序。您可以在此处为Dropbox API创建新的应用:https://www.dropbox.com/developers/apps
更多Dropbox API创建详情,请参考:Linux: 命令行访问 Dropbox, 命令行查看或上传文件到 Dropbox, 命令行调用Dropbox V2 API
系统要求
安装
Dropbox PHP SDK可以通过Composer安装。
$ php composer require kunalvarma05/dropbox-php-sdk
配置
首先,需要使用从Dropbox Developer App Dashboard获得的client_id和client_secret配置DropboxApp类,方法是创建一个Application。
use Kunnu\Dropbox\DropboxApp; $app = new DropboxApp("client_id", "client_secret");
如果您已有访问令牌,则可以将其作为第三个参数传递给上面的构造函数。
$app = new DropboxApp("client_id", "client_secret", 'access_token');
该Dropbox
服务类需要与Dropbox的API来工作。要配置Dropbox服务类,需要将上面创建的DropboxApp的实例作为第一个参数传递。
use Kunnu\Dropbox\Dropbox; $dropbox = new Dropbox($app);
快速开始
用法很简单。在Dropbox的与Dropbox的API交互所需的服务类房屋的所有方法(其中大部分,现在)。
use Kunnu\Dropbox\Dropbox;
use Kunnu\Dropbox\DropboxApp;
//Configure Dropbox Application
$app = new DropboxApp("client_id", "client_secret", "access_token");
//Configure Dropbox service
$dropbox = new Dropbox($app);
//Get File Metadata
$fileMetadata = $dropbox->getMetadata("/helloworld.txt");
//File Name
$fileMetadata->getName();
详细使用指南
身份验证和授权
大多数情况下,对Dropbox API提出的所有请求都需要访问令牌。我们可以使用DropboxAuthHelper类获取用户访问令牌。
以下是身份验证和授权流程的工作原理:
- 使用DropboxAuthHelper生成带有该
getAuthUrl()
方法的登录/授权URL 。 - 该URL将用户带到应用程序授权屏幕以进行访问批准。用户批准/授予对您应用的访问权限后:A.如果a
redirect_uri
作为参数传递给getAuthUrl()
方法,您将使用。重定向回预先指定的URL(redirect_uri
)authorization code
。B.如果redirect_uri
未提供a,authorization code
将直接呈现给用户。 - 我们可以通过该
getAccessToken()
方法获取用户访问令牌,方法是传递authorization code
上一步中获得的(CSRF state
如果redirect_uri
指定了一个令牌,则获取令牌)。
例:
header.php
<?php
session_start();
require_once 'vendor/autoload.php';
use Kunnu\Dropbox\Dropbox;
use Kunnu\Dropbox\DropboxApp;
//Configure Dropbox Application
$app = new DropboxApp("client_id", "client_secret");
//Configure Dropbox service
$dropbox = new Dropbox($app);
//DropboxAuthHelper
$authHelper = $dropbox->getAuthHelper();
//Callback URL
$callbackUrl = "https://{my-website}/login-callback.php";
?>
login.php
<?php require_once 'header.php'; //Fetch the Authorization/Login URL $authUrl = $authHelper->getAuthUrl($callbackUrl); echo "<a href='" . $authUrl . "'>Log in with Dropbox</a>"; ?>
该DropboxAuthHelper利用PHP会话存储CSRF令牌,该令牌将使用验证
state
参数返回与回调URL查询参数。在调用getAuthUrl()
方法之前,请确保已启用会话。
让我们使用和获取的AccessToken以及回调URL作为查询参数。code
state
login-callback.php
<?php
require_once 'header.php'
if (isset($_GET['code']) && isset($_GET['state'])) {
//Bad practice! No input sanitization!
$code = $_GET['code'];
$state = $_GET['state'];
//Fetch the AccessToken
$accessToken = $authHelper->getAccessToken($code, $state, $callbackUrl);
echo $accessToken->getToken();
}
?>
如果redirect_uri
在调用时没有提供a getAuthUrl()
(Authentication Flow步骤2B
):
<?php
require_once 'header.php'
$code = 'code-presented-directly-to-the-user';
//Fetch the AccessToken
$accessToken = $authHelper->getAccessToken($code);
echo $accessToken->getToken();
?>
要撤消访问令牌,只需调用该revokeAccessToken()
方法即可。
注意:在调用
revokeAccessToken
方法之前,必须已设置访问令牌。
$authHelper->revokeAccessToken();
使用文件
一旦实例化了Dropbox
服务并获得了访问令牌,就可以轻松访问所有文件操作。
获取文件/文件夹元数据
$file = $dropbox->getMetadata("/hello-world.txt");
或者
$file = $dropbox->getMetadata("/hello-world.txt", ["include_media_info" => true, "include_deleted" => true]);
获取文件详细信息:
//Id $file->getId(); //Name $file->getName(); //Size $file->getSize();
该getMetadata()
方法将返回FileMetadata
模型的实例。
有关详细信息和可用选项,请参阅:https://www.dropbox.com/developers/documentation/http/documentation#files-get_metadata
列出文件夹内容
$listFolderContents = $dropbox->listFolder("/"); //Fetch Items $items = $listFolderContents->getItems(); //Fetch Cusrsor for listFolderContinue() $cursor = $listFolderContents->getCursor(); //If more items are available $hasMoreItems = $listFolderContents->hasMoreItems();
该listFolder()
方法将返回MetadataCollection
模型的实例。
$listFolderContents = $dropbox->listFolder("/");
//Fetch Items (Returns an instance of ModelCollection)
$items = $listFolderContents->getItems();
//All Items
$items->all();
//First Item
$items->first();
//Last Item
$items->last();
进一步调用模型的getItems()
方法MetadataCollection
,将返回模型的实例ModelCollection
,这扩展了令人敬畏的Collection类。看看它的可用方法。
有关详细信息和可用选项,请参阅:https://www.dropbox.com/developers/documentation/http/documentation#files-list_folder
列表文件夹继续
使用从listFolder或listFolderContinue中检索到的光标,遍历所有文件并检索文件夹的更新。
$listFolderContents = $dropbox->listFolder("/"); //Process listFolder Items ... //If more items are available if ($listFolderContents->hasMoreItems()) { //Fetch Cusrsor for listFolderContinue() $cursor = $listFolderContents->getCursor(); //Paginate through the remaining items $listFolderContinue = $dropbox->listFolderContinue($cursor); $remainingItems = $listFolderContinue->getItems(); }
该listFolderContinue()
方法将返回MetadataCollection
模型的实例,与listFolder
方法相同。
列出文件夹最新光标
//Fetch the latest cursor $cursor = $dropbox-listFolderLatestCursor("/Public"); //Use this cursor to check if any files/folders where modified //post this cursor was obtained $modifiedItems = $dropbox->listFolderContinue($cursor)->getItems();
该listFolderLatestCursor()
方法将返回一个cursor
。
将此方法cursor
与此listFolderContinue()
方法一起使用将返回MetadataCollection
模型的实例,其中包含自方法cursor
获取以来已修改的文件/文件夹listFolderLatestCursor
。
有关详细信息和可用选项,请参阅:https://www.dropbox.com/developers/documentation/http/documentation#files-list_folder-get_latest_cursor
列表修订
获取文件的修订版
$revisions = $dropbox->listRevisions("/hello-world.txt", ["limit" => 3]); //All Revisions $revisions->all(); //First Revision $revisions->first(); //Last Revision $revisions->last();
该listRevisions()
方法将返回ModelCollection
模型的实例,该实例扩展了令人敬畏的Collection类。看看它的可用方法。
有关详细信息和可用选项,请参阅:https://www.dropbox.com/developers/documentation/http/documentation#files-list_revisions
搜索
在文件夹中搜索文件/文件夹。
$searchQuery = "hello world"; $searchResults = $dropbox->search("/", $searchQuery, ['start' => 0, 'max_results' => 5]); //Fetch Items $items = $searchResults->getItems(); //Fetch Cusrsor for calling search() with the `start` parameter/option for pagination $startCursor = $searchResults->getCursor(); //If more items are available if ($searchResults->hasMoreItems()) { //Pagination $moreSearchResults = $dropbox->search("/", $searchQuery, ['start' => $startCursor, 'max_results' => 5]); }
该search()
方法将返回SearchResults
模型的实例,该实例扩展了MetadataCollection
模型。
$searchQuery = "hello world";
$searchResults = $dropbox->search("/", $searchQuery, ['start' => 0, 'max_results' => 5]);
//Fetch Items (Returns an instance of ModelCollection)
$items = $searchResults->getItems();
//All Items
$items->all();
//First Item (Returns an instance of SearchResult)
$item = $items->first();
//Get the type of match, that was found for the result
$item->getMatchType();
//Get the Metadata of the File or Folder
$item->getMetadata();
进一步调用模型的getItems()
方法SearchResults
,将返回模型的实例ModelCollection
,其中每个项目将是SearchResult
模型的实例。
有关详细信息和可用选项,请参阅:https://www.dropbox.com/developers/documentation/http/documentation#files-search
创建文件夹
在给定路径创建一个文件夹
$folder = $dropbox->createFolder("/My Folder");
//Name
$folder->getName();
该createFolder()
方法将返回FolderMetadata
模型的实例。
有关详细信息和可用选项,请参阅:https://www.dropbox.com/developers/documentation/http/documentation#files-create_folder
删除文件/文件夹
删除给定路径中的文件或文件夹
$deletedFolder = $dropbox->delete("/My Folder"); //Name $deletedFolder->getName();
该delete()
方法将返回DeletedMetadata
模型的实例。
有关详细信息和可用选项,请参阅:https://www.dropbox.com/developers/documentation/http/documentation#files-delete
恢复文件
将文件还原到特定版本
$revision = "rev:a1c10ce0dd78"; $restoredFile = $dropbox->restore("/Hello-World.txt", $rev); //Name $restoredFile->getName();
该restore()
方法将返回的任一实例FileMetadata
,FolderMetadata
和DeletedMetadata
模型。
有关详细信息和可用选项,请参阅:https://www.dropbox.com/developers/documentation/http/documentation#files-restore
移动文件/文件夹
将文件或文件夹移动到其他位置
$file = $dropbox->move("/Private/Hello-World.txt", "/Public/Hello-World.txt"); //Name $file->getName();
该move()
方法将返回的任一实例FileMetadata
,FolderMetadata
和DeletedMetadata
模型。
有关详细信息和可用选项,请参阅:https://www.dropbox.com/developers/documentation/http/documentation#files-move
复制文件/文件夹
将文件或文件夹复制到其他位置
$file = $dropbox->copy("/Private/Hello-World.txt", "/Public/Hello-World.txt"); //Name $file->getName();
该copy()
方法将返回的任一实例FileMetadata
,FolderMetadata
和DeletedMetadata
模型。
有关详细信息和可用选项,请参阅:https://www.dropbox.com/developers/documentation/http/documentation#files-copy
获取复制参考
获取文件或文件夹的副本引用。此引用字符串可用于将该文件或文件夹传递给另一个用户的Dropbox saveCopyReference()
。
$copyReference = $dropbox->getCopyReference("/Hello-World.txt"); //Get Reference $copyReference->getReference();
该getCopyReference()
方法将返回CopyReference
模型的实例。
有关详细信息和可用选项,请参阅:https://www.dropbox.com/developers/documentation/http/documentation#files-copy_reference-get
保存复制参考
将返回的副本引用保存getCopyReference
到用户的Dropbox。
$copyReference = $dropbox->getCopyReference("/Hello-World.txt"); //Get Reference $reference = $copyReference->getReference(); //Save Copy Reference $file = $dropbox->saveCopyReference("/My-Hello-World.txt", $reference); //Name $file->getName();
该saveCopyReference()
方法将返回其中一个FileMetadata
和FolderMetadata
模型的实例。
有关详细信息和可用选项,请参阅:https://www.dropbox.com/developers/documentation/http/documentation#files-copy_reference-save
获取临时链接
获取流式传输文件内容的临时链接。
$temporaryLink = $dropbox->getTemporaryLink("/my-logo.png"); //Get File Metadata $file = $temporaryLink->getMetadata(); //Get Link $temporaryLink->getLink();
该getTemporaryLink()
方法将返回TemporaryLink
模型的实例。
有关详细信息和可用选项,请参阅:https://www.dropbox.com/developers/documentation/http/documentation#files-get_temporary_link
获取缩略图
获取图像文件的缩略图。
//Available sizes: 'thumb', 'small', 'medium', 'large', 'huge' $size = 'small'; //Default size //Available formats: 'jpeg', 'png' $format = 'jpeg'; //Default format $file = $dropbox->getThumbnail('/my-logo.jpg', $size, $format); //Get File Contents $contents = $file->getContents(); //Save File Contents to Disk file_put_contents(__DIR__ . "/my-logo.jpg", $contents); //Get File Metadata $file->getMetadata();
该getThumbnail()
方法将返回Thumbnail
模型的实例。
有关详细信息和可用选项,请参阅:https://www.dropbox.com/developers/documentation/http/documentation#files-get_thumbnail
上传和下载文件
使用此SDK轻松上传文件。
Dropbox文件
该DropboxFile类表示要上传的文件。在将文件上载到Dropbox之前,您需要实例化一个DropboxFile
类。传递DropboxFile
类实例并不是强制性的,因为您可以将路径传递给文件。
按文件路径创建DropboxFile
一个DropboxFile
实例可以通过传递路径到本地文件作为第一个参数和创建任选使所述接入模式(读或写)作为第二个参数,以构造。该createByPath()
静态方法也可以用于相同的。
use Kunnu\Dropbox\DropboxFile;
$pathToLocalFile = __DIR__ . "/Hello-World.txt";
$dropboxFile = new DropboxFile($pathToLocalFile);
// OR
$mode = DropboxFile::MODE_READ;
$dropboxFile = new DropboxFile($pathToLocalFile, $mode);
// OR
// Note: The `$mode` parameter is mandatory for this method.
$dropboxFile = DropboxFile::createByPath($pathToLocalFile, $mode);
按文件流创建DropboxFile
一个DropboxFile
实例还可以通过使用文件流创建。
use Kunnu\Dropbox\DropboxFile; $pathToLocalFile = __DIR__ . "/Hello-World.txt"; // Automatically create stream through file path $dropboxFile = DropboxFile::createByStream("/Hello-World.txt", $pathToLocalFile); // OR // Create stream through file stream $fileStream = fopen($pathToLocalFile, DropboxFile::MODE_READ); $dropboxFile = DropboxFile::createByStream("/Hello-World.txt", $fileStream);
自动文件上传
将文件自动上传到Dropbox,可以是单个请求,也可以是块。这是上传文件的推荐方法。
$file = $dropbox->upload($dropboxFile, "/My-Hello-World.txt", ['autorename' => true]); //Uploaded File $file->getName();
有关详细信息和可用选项,请参阅:https://www.dropbox.com/developers/documentation/http/documentation#files-upload
简单文件上传
在单个请求中将文件上传到Dropbox。
$file = $dropbox->simpleUpload($dropboxFile, "/My-Hello-World.txt", ['autorename' => true]); //Uploaded File $file->getName();
该simpleUpload()
方法将返回FileMetadata
上传文件的内容。
有关详细信息和可用选项,请参阅:https://www.dropbox.com/developers/documentation/http/documentation#files-upload
分块文件上传
将文件以块的形式上传到Dropbox。
//File size (bytes) $fileSize = 400000000; //Chunk Size $chunkSize = $filSize / 4; $file = $dropbox->uploadChunked($dropboxFile, "/game-of-thrones-fan-trailer.mp4", $filesize, $chunkSize, ['autorename' => true]); //Uploaded File $file->getName();
该uploadChunked()
方法将返回FileMetadata
上传文件的内容。
有关详细信息和可用选项,请参阅:https://www.dropbox.com/developers/documentation/http/documentation#files-upload
按URL上传文件
保存网址
将指定的URL保存到用户Dropbox中的文件中。
$asyncJobID = $dropbox->saveUrl("/my-logo.png", 'http://mywebsite.com/wp-content/uploads/2016/06/logo.png');
该saveUrl()
方法将返回asyncJobID
(异步作业ID)。该asyncJobID
字符串是一个id,可用于使用该checkJobStatus
方法获取异步作业的状态。
有关详细信息和可用选项,请参阅:https://www.dropbox.com/developers/documentation/http/documentation#files-list_folder-save_url
检查工作状态
检查saveUrl
作业的状态。
$asyncJobID = $dropbox->saveUrl("/my-logo.png", 'http://mywebsite.com/wp-content/uploads/2016/06/logo.png'); //Check Status $status = $dropbox->checkJobStatus($asyncJobID); //Job Successful. File saved. if ($status instanceof FileMetadata) { $file = $status; echo $file->getName(); } elseif ($status === "in_progress") { echo "Processing job..."; } elseif ($status === "failed") { echo "Job Failed!"; } else { echo $status; }
该checkJobStatus()
方法将FileMetadata
在成功或作业时返回保存的文件,该文件status
可以是in_progress
或failed
。
有关详细信息和可用选项,请参阅:https://www.dropbox.com/developers/documentation/http/documentation#files-list_folder-save_url-check_job_status
下载文件
下载文件。
$file = $dropbox->download("/my-logo.png"); //File Contents $contents = $file->getContents(); //Save file contents to disk file_put_contents(__DIR__ . "/logo.png", $contents); //Downloaded File Metadata $metadata = $file->getMetadata(); //Name $metadata->getName();
直接下载到文件
建议使用此方法,尤其是在下载大文件时。
// Download and the save the file at the given path $file = $dropbox->download("/my-large-file.mp4", '/path-to-save-file-to.mp4'); //Downloaded File Metadata $metadata = $file->getMetadata(); //Name $metadata->getName();
该download()
方法将返回File
模型。
有关详细信息和可用选项,请参阅:https://www.dropbox.com/developers/documentation/http/documentation#files-download
使用用户帐户
获取帐户信息,批量帐户信息和帐户空间使用情况。
获取当前帐户
获取当前授权用户的帐户。
$account = $dropbox->getCurrentAccount(); //Id $account->getAccountId(); //Name $account->getDisplayName(); //Email $account->getEmail(); //Profile Pic URL $account->getProfilePhotoUrl(); //Account Type $account->getAccountType();
该getCurrentAccount()
方法将返回Account
模型的实例。
有关详细信息和可用选项,请参阅:https://www.dropbox.com/developers/documentation/http/documentation#users-get_current_account
获取帐户
获取用户的帐户。
$accountId = "dbid:AAH4f99T0taONIb-OurWxbNQ6ywGRopQngc"; $account = $dropbox->getAccount($accountId); //Id $account->getAccountId(); //Name $account->getDisplayName(); //Email $account->getEmail(); //Profile Pic URL $account->getProfilePhotoUrl(); //Account Type $account->getAccountType();
该getAccount()
方法将返回Account
模型的实例。
有关详细信息和可用选项,请参阅:https://www.dropbox.com/developers/documentation/http/documentation#users-get_account
获取批量帐户
获取多个帐户。
$accountIds = [ "dbid:AAH4f99T0taONIb-OurWxbNQ6ywGRopQngc", "dbid:AADRW_KJHkjHihoi8iujbJ78nmbB8jbKB98", "dbid:AAH7e48H2kapNKb-OaONIbNQRop6ywGQngc", ]; $accounts = $dropbox->getAccounts($accountIds); //All Accounts $accounts->all(); //First Account $account = $accounts->first(); //Name $account->getDisplayName();
该getAccounts()
方法将返回AccountList
扩展ModelCollection
模型的模型实例。
有关详细信息和可用选项,请参阅:https://www.dropbox.com/developers/documentation/http/documentation#users-get_account_batch
获得空间使用
获取当前用户帐户的空间使用情况
$accountSpace = $dropbox->getSpaceUsage(); //Space Used $used = $accountSpace['used']; //Space Allocated $allocated = $accountSpace['allocated'];
该getSpaceUsage()
方法将返回一个包含帐户空间使用详细信息的数组。这是一个示例响应:
{ "used": 314159265, "allocation": { ".tag": "individual", "allocated": 10000000000 } }
使用共享链接和共享文件夹
创建和管理共享链接和共享文件夹。
目前,SDK没有与共享端点交互的专用方法,类似于获取文件/文件夹元数据或上传文件的专用方法。
但是,SDK仍然可以向共享端点(或任何Dropbox API端点)发出请求并获取/解码数据。
例如,您可以创建如下共享链接:
/** * Assuming you have configured the DropboxApp class * @see https://github.com/kunalvarma05/dropbox-php-sdk/wiki/Configuration */ $dropbox = new Dropbox($app); $pathToFile = "/hello-world.txt"; $response = $dropbox->postToAPI("/sharing/create_shared_link_with_settings", [ "path" => $pathToFile ]); $data = $response->getDecodedBody(); var_dump($data);
本文: PHP: 操作 Dropbox, 查看,下载,上传,删除等