从 Dropbox 上的公共共享文件夹和子文件夹下载图像

Art*_*ior 5 c# dropbox dropbox-api dropbox-sdk

这类似于我之前的问题: 从 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(???);
        }
    }        
}
Run Code Online (Sandbox Code Playgroud)

如何列出所有子文件夹的条目?

Gre*_*reg 3

ListFolderAsync对于任何给定的子文件夹,要列出其内容,您需要使用相同的值再次回调sharedLink,但path为子文件夹提供相对于共享链接的根文件夹的值。

例如,如果您列出文件夹共享链接的内容,并且其中一个条目是名为“SomeFolder”的文件夹,则要列出“SomeFolder”的内容,您需要进行如下调用:

await dbx.Files.ListFolderAsync(path: "/SomeFolder", sharedLink: sharedLink);
Run Code Online (Sandbox Code Playgroud)