Простая работа с Dropbox API

// Вывод дерева
printTree($tree);

if (isset($_GET[‘action’])) {
switch ($_GET[‘action’]) {
// Создание новой папки
case ‘newdir’:

if (isset($_GET[‘pid’])) {
include ‘form-create-dir.php’;

if ($_POST) {
if (!empty($_POST[‘newFolder’])) {

$affixPath = urldecode(base64_decode(htmlspecialchars($_GET[‘pid’])));
$dirName = htmlspecialchars($_POST[‘newFolder’]);
$folder = $dropbox->createFolder(«$affixPath/$dirName»);
header(‘Location:’ . filter_var($redirect_uri, FILTER_SANITIZE_URL));

} else {
die(‘Заполните название папки’);
}
}
}

break;

// Загрузка файлов
case ‘upload’:

if (isset($_GET[‘fid’])) {
include ‘form-upload-file.php’;

if (isset($_FILES[‘Files’]) && is_uploaded_file($_FILES[‘Files’][‘tmp_name’][0]) && ($_FILES[‘Files’][‘error’][0] == 0)) {
$files = normalizeFilesArray($_FILES);
$affixPath = urldecode(base64_decode(htmlspecialchars($_GET[‘fid’])));

foreach ($files as $file) {
$file = $dropbox->upload(
DropboxFile::createByStream(«$affixPath/{$file[‘name’]}», file_get_contents($file[‘tmp_name’])),
«$affixPath/{$file[‘name’]}»,
[‘autorename’ => true]
);
}

header(‘Location:’ . filter_var($redirect_uri, FILTER_SANITIZE_URL));
}
}

break;

case ‘delete’:

if (isset($_GET[‘fid’])) {
$deletedFolder = $dropbox->delete(urldecode(base64_decode(htmlspecialchars($_GET[‘fid’]))));
header(‘Location:’ . filter_var($redirect_uri, FILTER_SANITIZE_URL));
}

break;
}
}

ob_end_flush();

/** Функции */

function makeTree(Dropbox &$dropbox, $path)
{
$branch = [];

// Список файлов и папок
$listFolderContents = $dropbox->listFolder($path);

// Получить элементы
$items = $listFolderContents->getItems();

// Все элементы как массив
$listFiles = $items->toArray();

foreach ($listFiles as $k => $item) {
$branch[$k] = [
‘id’ => substr($item->id, 3),
‘name’ => $item->name,
‘path’ => $item->path_display,
‘type’ => $item->getData()[‘.tag’],
];

// Дата и время в нормальном виде
if (isset($item->getData()[‘server_modified’])) {
$branch[$k][‘created’] = $item->getData()[‘server_modified’];
}

// Размер файла
if ($item->size) {
$branch[$k][‘size’] = $item->size;
}

if ($item->getData()[‘.tag’] == ‘folder’) {
$branch[$k][‘children’] = makeTree($dropbox, $item->path_lower);
}
}
return $branch;
}

function printTree($tree)
{
if (!is_null($tree) && count($tree) > 0) {
echo ‘<ul>’;
foreach ($tree as $kn => $node) {
echo ‘<li>’;

if ($node[‘type’] == ‘folder’) {
$url = ‘https://www.dropbox.com/home’ . $node[‘path’];
}
if ($node[‘type’] == ‘file’) {
$url = ‘https://www.dropbox.com/preview’ . $node[‘path’] . ‘?role=personal’;
}

echo ‘<a href=»‘ . $url . ‘»>’;

if ($node[‘type’] == ‘folder’) {
echo ‘<b>’ . $node[‘name’] . ‘</b>’;
} else {
echo $node[‘name’];
}

echo ‘</a> ‘;

if ($node[‘type’] == ‘file’) {
echo date(‘d.m.Y H:i:s’, strtotime($node[‘created’]));
}

if ($node[‘type’] == ‘folder’) {
echo ‘ <a href=»?action=newdir&pid=’ . base64_encode(urlencode($node[‘path’])) . ‘» title=»Новая папка»><i class=»icon-new»></i></a>’;
}
echo ‘ <a href=»?action=upload&fid=’ . base64_encode(urlencode($node[‘path’])) . ‘» title=»Загрузить файл(ы)»><i class=»icon-upload»></i></a>’;
echo ‘ <a href=»?action=delete&fid=’ . base64_encode(urlencode($node[‘path’])) . ‘» title=»Удалить файл(ы)» onclick=»return confirm(\’Вы действительно хотите удалить данный файл?\’);»><i class=»icon-delete»></i></a>’;

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

2 thoughts on “Простая работа с Dropbox API

    • 29.03.2019 в 16:51
      Permalink

      Добрый день! В начале статьи написано, что подразумевается, умеете работать с Composer.
      Если выполнить установку через composer

      $ php composer require kunalvarma05/dropbox-php-sdk

      , то обычно появляется папка vendor. Вот там обычно есть такой файл. В данном случае он нужен для автозагрузки.

Добавить комментарий

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: