针对某云盘接口实现分片多线程上传功能
因为某云盘接口文档说不支持并发上传(也就是说服务端没有采用序号标记去合并),而且在网上搜不到该网盘类似案例,都是用的单线程,导致在设计实现过程中踩了很多坑
实现并发上传思路在这里有写https://www.cnblogs.com/1314h/p/16893032.html,该方案适合任意云盘。
首先分片上传想到的肯定是先获取文件大小->切片->获取md5值->上传至服务器,大概这么个流程,而实现方面我首次采用的是Python aiohttp异步,切换耗费小且利用率高,在测试同步上传的时候没什么问题,但是一到并发上传,文件的md5值就会和原文件不同。
后来我想明白之前忽略了一个细节,await asyncio.sleep() 等待后会调度其他事件导致上传md5值不同,当即就换成多线程实现,结果也很令人满意,上传文件md5值与原文件一致。
经过这次优化,上传效率有了质的飞跃,特别是在大文件上传时特别明显,顺便也实现了断点续传,总体令人满意。
需要源码可以私信我。