OkHttp 断点上传的“基操”,设计思想与代码质量优化+程序性能优化+开发效率优化

input.skip(skipSize); //跳到断点位置

}

source = Okio.source(input);

sink.writeAll(source);

} finally {

OkHttpCompat.closeQuietly(source, input);

}

}

}

为方便阅读,以上省略部分源码,FileRequestBody类完整源码

有了FileRequestBody类,我们只需要传入一个断点位置,剩下的工作就跟普通的文件上传一样。 接下来,直接进入代码实现。

3、代码实现

======

3.1 获取断点位置


首先,需要服务端提供一个接口,通过userId去查找该用户未上传完成的任务列表,代码如下:

RxHttp.get(“/…/getToUploadTask”)

.add(“userId”, “88888888”)

.asList()

.subscribe({

//成功回调,这里通过 it 拿到 List

}, {

//异常回调

});

其中ToUploadTask类如下:

//待上传任务

data class ToUploadTask(

val md5: String, //文件的md5,用于验证文件的唯一性

val filePath: String, //文件在客户端的绝对路径

val skipSize: Long = 0 //断点位置

)

注:md5、filePath 这两个参数需要客户端在文件上传时传递给服务端,用于对文件的校验,防止文件错乱

3.2 断点上传


有了待上传任务,客户端就可以执行断点上传操作,OkHttp代码如下:

fun uploadFile(uploadTask: ToUploadTask) {

//1.校验文件是否存在

val file = File(uploadTask.filePath)

if (!file.exists() && !file.isFile) return

//2.校验文件的 md5 值

val fileMd5 = FileUtils.getFileMD5ToString(file)

if (!fileMd5.equals(uploadTask.md5)) return

//3.构建请求体

val fileRequestBody = FileRequestBody(file, uploadTask.skipSize, BuildUtil.getMediaType(file.name))

val multipartBody = MultipartBody.Builder()

.addFormDataPart(“userId”, “88888888”)

.addFormDataPart(“md5”, fileMd5)

.addFormDataPart(“filePath”, file.absolutePath)

.addFormDataPart(“file”, file.name, fileRequestBody) //添加文件body

.build()

//4.构建请求

val request = Request.Builder()

.url(“/…/uploadFile”)

.post(multipartBody)

.build()

//5.执行请求

val okClient = OkHttpClient.Builder().build()

okClient.newCall(request).enqueue(object : Callback {

override fun onFailure(call: Call, e: IOException) {

//异常回调

}

override fun onResponse(call: Call, response: Response) {

//成功回调

}

})

}

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip204888 (备注Android)
img

最后

我坚信,坚持学习,每天进步一点,滴水穿石,我们离成功都很近!
以下是总结出来的字节经典面试题目,包含:计算机网络,Kotlin,数据结构与算法,Framework源码,微信小程序,NDK音视频开发,计算机网络等。

字节高级Android经典面试题和答案


很近!**
以下是总结出来的字节经典面试题目,包含:计算机网络,Kotlin,数据结构与算法,Framework源码,微信小程序,NDK音视频开发,计算机网络等。

字节高级Android经典面试题和答案

[外链图片转存中…(img-0o2pzr38-1711782086680)]
[外链图片转存中…(img-OyADZiVs-1711782086680)]

本文已被CODING开源项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》收录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值