【钉盘日记】通过调用api的方式定时下载钉盘的文件

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

最近在整一个定时将钉钉云盘所有文件下载下来的服务,其中因为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
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值