如何在C# MVC中通过Dropbox API获取已删除文件及回收站内容?
解决Dropbox API获取回收站内容的问题
直接传入回收站URL给ListFolderAsync是不可行的哦,Dropbox API并不把回收站当作一个常规的文件夹路径来访问,得用专门的参数来获取已删除的文件和文件夹。我给你梳理两种靠谱的方式:
方式一:通过include_deleted参数获取含删除项的目录内容
ListFolderAsync方法支持传入include_deleted参数,设为true时,返回结果会包含当前目录下所有已删除的项(这些项会保留原路径,但标记为删除状态)。你可以在此基础上筛选出回收站里的内容:
// 获取根目录所有内容(包含已删除项) var list = await dbx.Files.ListFolderAsync(string.Empty, include_deleted: true); // 筛选出已删除的文件/文件夹 var deletedItems = list.Entries.Where(entry => entry.IsDeleted).ToList(); // 遍历处理已删除项 foreach (var item in deletedItems) { Console.WriteLine($"已删除{item.IsFolder ? "文件夹" : "文件"}:{item.Name},原路径:{item.PathLower}"); }
如果回收站内容较多,需要分页获取的话,记得处理HasMore属性和游标:
var allDeletedItems = new List<Metadata>(); var list = await dbx.Files.ListFolderAsync(string.Empty, include_deleted: true); allDeletedItems.AddRange(list.Entries.Where(e => e.IsDeleted)); // 循环获取下一页内容 while (list.HasMore) { list = await dbx.Files.ListFolderContinueAsync(list.Cursor); allDeletedItems.AddRange(list.Entries.Where(e => e.IsDeleted)); }
方式二:搜索回收站内容(适合精准查找)
如果你不需要遍历所有回收站内容,而是要搜索特定的已删除文件/文件夹,可以用SearchAsync方法,同样设置include_deleted: true:
// 搜索回收站中包含"project"的项 var searchResult = await dbx.Files.SearchAsync(string.Empty, "project", include_deleted: true); var deletedSearchItems = searchResult.Matches.Where(m => m.Metadata.IsDeleted).ToList();
关键提醒
- 不要尝试直接传入类似
"/.trash"这种路径,Dropbox API不支持通过常规路径访问回收站; - 已删除项的
IsDeleted属性会标记为true,你可以通过这个属性区分正常内容和回收站内容; - 如果需要恢复这些项,可以使用
Files.RestoreAsync方法,传入已删除项的路径或ID即可。
内容的提问来源于stack exchange,提问作者Carlos Salinas Piña
相关产品推荐
相关产品推荐

