我目前正在使用 API v2 的官方 Dropbox.NET SDK 来开发通用 Windows 平台应用程序。我使用 Dropbox 来存储图像。我想在 Dropbox 文件夹的根目录中执行搜索并返回匹配结果。
在这种情况下,我想获取如下元数据:
有人知道怎么做吗?我已经浏览了 Dropbox.NET 的文档。但我不知道该怎么做。请帮忙。谢谢。
这就是我使用 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 只是我为保存凭据而创建的一个类。如果您只有一个应用程序,则不必传递此信息。但是,如果您有多个应用程序,它确实会很方便。它还可以防止您在论坛上寻求帮助时意外发布不应该发布的内容。