最近在整一个定时将钉钉云盘所有文件下载下来的服务,其中因为api只能拿到单独文件的关系,因此逻辑比较绕

经过设计后,进行代码的编写;
设计逻辑:
1、首先先从apollo拿到所需的appkey和APPsecret,用于获取accesstoken,以及获取能获取到全部文件的用户的unionid。
2、获取到的unionid和token用于获取该用户云盘下的全部文件夹信息,从返回到的json信息中获取spaces内容,并序列化成列表(每个文件夹都有自己的spaceid)。
3、在应用层对spaceid列表进行遍历,对每个spaceid进行接下来的操作。
4、调用获取文件列表接口,将返回结果序列化,因为存在分页机制。如果返回结果中存在nextToken则将此参数进行再次调用,进行序列化后再对列表进行拼接。当文件类型是文件时,与表里的fileid进行一次比对,如果存在就跳过,如果不存在则存入新的list中,当文件类型是文件夹时,递归查询该文件夹下的文件,将列表返回与原列表拼接。
5、将文件列表中的fileid取出并获取下载信息,进行文件的下载,同时获取文件信息,并将文件信息中的人员id拿到人员信息,将文件转换为base64字节和人员信息一齐发送到文件下载服务,最后将文件信息存入表中。
在ddd模式的application层进行循环的编写

这里最主要的是要进行一个文件的递归,代码较长,只放出一部分抛砖引玉
public List<SortedList<string, string>> GetFileList1(string spaceId, string accessToken, string nextToken, List<SortedList<string, string>> list, string unionId, string parentId)
{
bool flag = nextToken == null || nextToken == "";
List<SortedList<string, string>> result;
if (flag)
{
Dictionary<string, string> dictionary = new Dictionary<string, string>();
dictionary.Add("unionId", unionId);
dictionary.Add("maxResults", "50");
dictionary.Add("orderType", "createTimeDesc");
dictionary.Add("parentId", parentId);
string url = "https://api.dingtalk.com/v1.0/drive/spaces/" + spaceId + "/files";
string text = HttpHelper.Get(url, dictionary, accessToken);
SortedList<string, object> sortedList = JsonConvert.DeserializeObject<SortedList<string, object

本文介绍了一种使用DDD模式实现的定时任务,通过API逐级递归获取钉钉云盘中用户的所有文件,包括文件夹和文件,同时处理文件下载和元数据管理。
最低0.47元/天 解锁文章
444

被折叠的 条评论
为什么被折叠?



