如何使用Dropbox API v2的searchasync

问题描述 投票:0回答:1

我目前正在使用 API v2 的官方 Dropbox.NET SDK 来开发通用 Windows 平台应用程序。我使用 Dropbox 来存储图像。我想在 Dropbox 文件夹的根目录中执行搜索并返回匹配结果。

在这种情况下,我想获取如下元数据:

  1. 下载路径
  2. 图像缩略图

有人知道怎么做吗?我已经浏览了 Dropbox.NET 的文档。但我不知道该怎么做。请帮忙。谢谢。

c# .net dropbox-api
1个回答
0
投票

这就是我使用 SearchV2Async 搜索 Dropbox 的想法

public static async Task<List<DropboxDto>> SearchFilesAsync(DropboxStuff stuff, string folder, string searchTerm)
{
    // depends on your version of .Net
    ServicePointManager.SecurityProtocol =
        SecurityProtocolType.Tls12 |
        SecurityProtocolType.Tls11 |
        SecurityProtocolType.Tls;

    List<DropboxDto> fileList = new List<DropboxDto>();

    using (var dbx = new Dropbox.Api.DropboxClient(stuff.RefreshToken, stuff.AppKey, stuff.AppSecret))
    {
        try
        {
            SearchOptions options = new SearchOptions(path: folder);
            // fileStatus: status.AsActive,
            // filenameOnly: searchFiles);

            var search = await dbx.Files.SearchV2Async(searchTerm, options);

            bool hasMore = search.HasMore;
            string cursor = search.Cursor;

            foreach (var item in search.Matches)
            {
                DropboxDto dbxDto = new DropboxDto
                {
                    FileName = item.Metadata.AsMetadata.Value.Name,
                    FileWithPath = item.Metadata.AsMetadata.Value.PathLower,
                    FolderName = folder
                };
                fileList.Add(dbxDto);
            }

            while (hasMore)
            {
                var searchMore = await dbx.Files.SearchContinueV2Async(cursor);
                hasMore = searchMore.HasMore;
                cursor = searchMore.Cursor;

                foreach (var item in search.Matches)
                {
                    DropboxDto dbxDto = new DropboxDto
                    {
                        FileName = item.Metadata.AsMetadata.Value.Name,
                        FileWithPath = item.Metadata.AsMetadata.Value.PathLower,
                        FolderName = folder
                    };
                    fileList.Add(dbxDto);
                }
            }

        }
        catch (Exception ex)
        {
            // Log errors
            return fileList;
        }
    }

    return fileList;
}

DropboxDto 只是一个数据传输对象

public class DropboxDto
{
  public string FolderName { get; set; }
  public string FileName { get; set; }
  public string FileWithPath { get; set; }
}

如果将文件夹保留为空,它将搜索应用程序中的所有文件夹。如果您提供文件夹名称,它将仅返回提供的文件夹中的结果。

它使用 SearchContinueV2Async,因此它将返回超出页数的结果。

DropboxStuff 只是我为保存凭据而创建的一个类。如果您只有一个应用程序,则不必传递此信息。但是,如果您有多个应用程序,它确实会很方便。它还可以防止您在论坛上寻求帮助时意外发布不应该发布的内容。

© www.soinside.com 2019 - 2024. All rights reserved.