其实很早就准备接入阿里云盘了,因为在印象中阿里云盘的速度体验比较好,谁曾想:这是一次主观臆断。凡事没有调查就没有发言权,以后要避免凭印象做决定。
限速问题
百度网盘的限速主要体现在下载速度上,而阿里云盘的限速是全方位的,包括:
- 下载速度限制。
- 下载并发数限制。
- API调用限制。
其中的API调用限制基本上所有网盘都有,但是同样的内容同样的方式进行上传、下载,阿里云盘更容易触发。
下载并发数限制
按照阿里云盘官方应用分级描述:普通应用文件分段下载并发限制(单app单用户维度,1s窗口的并发上限)为3。但是实际测试下来,连续连载三个文件就会触发403错误,而且这三个文件的时间跨度已经超过了1秒。
API调用限制
比较常见的是429错误,即API调用配额,按照官方的描述,普通应用的API配额如下:
接口调用配额(单app单用户维度) | 核心 API 调用配额:~/openFile/list 10 秒 40 次~/getDownloadUrl 10 秒 10 次。剩余 API 限流:15 QPS |
问题是:阿里云盘的接口本身还有较大改进空间,比如没有递归返回文件列表的接口。
假如应用需要知道某一个文件夹下的内容信息,输入是文件夹路径,输出是文件夹内的条目信息。那么只能多次调用list,每次调用list返回一个子文件夹的信息。但是由于list接口依赖parent_file_id
,而parent_file_id
又需要通过get_by_path
获取。这又增加了API调用次数,更容易触发429错误。
关键接口缺失
缺少递归获取文件夹内条目的接口,相比百度网盘一次请求就能完成的任务,在阿里云盘上需要多次请求,且请求次数取决于子文件夹数量。
接口参数问题
本地文件创建时间字段不生效
文件创建接口:POST 域名 + /adrive/v1.0/openFile/create
。其中的local_created_at
和local_modified_at
字段不生效,
场景:先通过create
接口创建,然后再通过获取文件详情接口POST 域名 + /adrive/v1.0/openFile/get
,会返回created_at和updated_at,但是它们不是创建文件时指定的本地创建时间和本地修改时间(估计是服务器上时间)。同样的,在文件上传过程中,调用complete
接口返回的created_at和updated_at也不是调用create
接口时指定的本地时间。
文件上传没有覆盖选项
在文件上传的create步骤中,有如下选项,如果存在同名文件,只能选择:自动重命名、拒绝创建和创建同名文件。实在无法理解为什么要创建同名文件?而不是直接替换掉。
check_name_mode | string | 必填 | auto_rename 自动重命名,存在并发问题 refuse 同名不创建 ignore 同名文件可创建 |
问题处理方法
问题 | 解决方法 |
问题一:下载并发数限制导致403错误 | 控制下载请求的出口频率,对于分段下载:3次/秒,非分段下载:3次/60秒 |
问题二:API调用限制 | 采用同样的方法进行出口限制 |
问题三:缺少递归列举接口 | 官方接口还在开发,暂时只能用list接口替代 |
问题四:文件本地创建时间不生效 | 等待官方修复 |
问题五:文件上传模式中没有覆盖选项 | 在上传前,如果要覆盖,先delete,再上传 |