Загрузка изображений из общедоступных папок и подпапок в Dropbox

Это похоже на мой предыдущий вопрос: Загрузка изображений из общедоступной общей папки в Dropbox

У меня есть этот фрагмент кода (упрощенная версия), который должен загружать все изображения из общедоступной общей папки и всех подпапок.

using Dropbox.Api;
using Dropbox.Api.Files;
...
// AccessToken - get it from app console 
// FolderToDownload - https://www.dropbox.com/sh/{unicorn_string}?dl=0

using (var dbx = new DropboxClient(_dropboxSettings.AccessToken))
{
    var sharedLink = new SharedLink(_dropboxSettings.FolderToDownload);
    var sharedFiles = await dbx.Files.ListFolderAsync(path: "", sharedLink: sharedLink);

    // var sharedFiles = await dbx.Files.ListFolderAsync(path: "", sharedLink: sharedLink, recursive: true); 
    // "recursive: true" throws:  Error in call to API function "files/list_folder": Recursive list folder is not supported for shared link.

    foreach (var entry in sharedFiles.Entries)
    {
        if (entry.IsFile)
        {
            var link = await dbx.Sharing.GetSharedLinkFileAsync(url: _dropboxSettings.FolderToDownload, path: "/" + entry.Name);
            var byteArray = await link.GetContentAsByteArrayAsync();
        }

        if (entry.IsFolder)
        {
            var subFolder = entry.AsFolder;
            // var folderContent = await dbx.Files.ListFolderAsync(path: subFolder.Id);
            // var subFolderSharedLink = new SharedLink(???);
        }
    }        
}

Как составить список записей всех подпапок?


person Artur Kędzior    schedule 27.05.2020    source источник


Ответы (1)


Для любой заданной подпапки, чтобы просмотреть ее содержимое, вам нужно будет снова вызвать ListFolderAsync, используя то же значение sharedLink, но указав значение path для подпапки относительно корневой папки для общей ссылки.

Например, если вы перечисляете содержимое общей ссылки на папку, и одна из записей является папкой с именем «SomeFolder», чтобы затем вывести содержимое «SomeFolder», вам нужно будет сделать вызов, например:

await dbx.Files.ListFolderAsync(path: "/SomeFolder", sharedLink: sharedLink);
person Greg    schedule 27.05.2020