API Dropbox: список только файлов (в том числе во вложенных папках)

Я пытаюсь вывести список всех файлов в определенной папке Dropbox, включая файлы во вложенных папках, но не отображая сами папки.

Я использую PHP-класс DropboxClient, но не привязан к нему.

Мой текущий код работает только для файлов в первых подпапках. Кроме того, загрузка занимает очень много времени из-за того, что я запрашиваю Dropbox о содержимом каждой папки независимо. Я знаю, что могу получить одноразовый рекурсивный вызов API, но, похоже, мне не удается работать с массивом.

<?php
$folders = $dropbox->GetFiles("/Downloads/",false);

if(!empty($folders)) {

    $i=0;

    foreach($folders as $o) {
        if ($o->is_dir = true) {

            list(, $foldername) = explode('-', $o->path, 2);

            $i++;
            $cat[$i] = $foldername;
            echo '<h2>'.$foldername.'</h2>';

            $files = $dropbox->GetFiles($o->path,false);
            ?>




                <table>
                <tbody><tr>
                    <th>File</th>
                    <th>Date</th>
                    <th>Title</th>
                    <th>Description</th>
                </tr>
                <?php foreach($files as $f): ?>

                <?php

                        $filelink = $dropbox->GetLink($f, false);

                        $filetype = pathinfo($f->path, PATHINFO_EXTENSION);
                        $filename = pathinfo($f->path, PATHINFO_FILENAME);
                        $filenamesplit = explode ( '_-_', $filename);
                ?>

                <tr>
                    <td><a href="<?= $filelink ?>" target="_blank">Download</a></td>
                    <td><?= date("d.m.Y", strtotime($f->modified)); ?></td>
                    <td><?= $filenamesplit[0] ?></td>
                    <td><?= $filenamesplit[1] ?></td>
                </tr>
                <?php endforeach; ?>
                </tbody></table>


            <?php

        }
    }


}

Структура файла, например. что-то вроде этого:

Cat1Folder - File 1
Cat1Folder - SubFolder - File 2
Cat1Folder - SubFolder - File 3
Cat2Folder - File 1
Cat2Folder - SubFolder - File 2

И я хочу, чтобы выводился чистый список файлов, независимо от того, в какой папке они находятся.

Cat1Folder:
File 1
File 2
File 3

Cat2Folder:
File 1
File 2

person rafleo    schedule 09.09.2013    source источник


Ответы (2)


Думаю, вам это уже неинтересно, но пока я искал что-то похожее, я нашел это у вас. Из документации «DropboxClient PHP Class»:

GetFiles($dropbox_path=”, $recursive=false) Получить список файлов папки. Возвращает массив, в котором ключи пути к файлам и значения метаданных. Если $recursive истинно, все вложенные папки сканируются рекурсивно. Обратите внимание, что это может занять некоторое время, поскольку каждая вложенная папка вызывает новый запрос API.

Поэтому я думаю, что вы просто измените свой код на: $dropbox->GetFiles("/Downloads/",true);

person Raffobaffo    schedule 08.02.2018

Вызов delta — это более эффективный способ получить полное состояние Dropbox, в отличие от вызова метаданных для каждой папки. Разностная конечная точка будет возвращать страницы записей метаданных, которые в совокупности содержат все файлы.

person Greg    schedule 09.09.2013